BinarySearch(List, Object) 使用二進位搜尋演算法搜尋指定的物件清單。
BinarySearch(List, Object, IComparator) 使用二進位搜尋演算法搜尋指定的物件清單。
参数:
- List 要所有的list列表
- Object 要搜索的索引键
案例 :
package com.test.controller;import com.test.controller.pojo.ResData; import com.test.dto.ApiMonthTcDto; import org.springframework.util.CollectionUtils;import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collections; import java.util.List;public class Test {private static final DateTimeFormatter dtf_month = DateTimeFormatter.ofPattern("yyyy-MM");public static void main(String args[]){List<ApiMonthTcDto> list = new ArrayList<>();ApiMonthTcDto data=new ApiMonthTcDto();//2data.setYear("2023");data.setMonth(12);data.setNum(20);list.add(data);ApiMonthTcDto data1=new ApiMonthTcDto();data1.setYear("2024");data1.setMonth(9);data1.setNum(21);list.add(data1);ApiMonthTcDto data2=new ApiMonthTcDto();//1data2.setYear("2024");data2.setMonth(5);data2.setNum(21);list.add(data2);ApiMonthTcDto data3=new ApiMonthTcDto();data3.setYear("2024");data3.setMonth(10);data3.setNum(23);list.add(data3);ApiMonthTcDto data4=new ApiMonthTcDto();data4.setYear("2024");data4.setMonth(11);data4.setNum(21);list.add(data4);int[] sum = new int[0];if(!CollectionUtils.isEmpty(list)) {sum = new int[list.size()+1];sum[0] = 0;for (int i = 0; i < list.size(); i++) {sum[i+1] = list.get(i).getNum() + sum[i];//求和:获取tc count和 }}for(int i=12; i>=0; i--) {ResData tio = new ResData();LocalDate localDate = LocalDate.now().minusMonths(i);String timeAtMonth = localDate.format(dtf_month);ApiMonthTcDto key = new ApiMonthTcDto();key.setYear(String.valueOf(localDate.getYear()));key.setMonth(localDate.getMonth().getValue());int insertPosition = Collections.binarySearch(list, key);//方法用于使用二进制搜索算法在指定列表中搜索指定对象。 列表必须根据指定的比较器按升序排序。if (insertPosition >= 0) {tio.setComplete(sum[insertPosition+1]);} else {tio.setComplete(sum[-insertPosition - 1]);}System.out.println(tio.getComplete());}} }