java.util.Collection集合方法:Collections.BinarySearch 方法
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();//2 data.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();//1 data2.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()); } } }