java.util.Collection集合方法:Collections.BinarySearch 方法

苹果芒發表於2024-11-15

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());

        }



    }
}

相關文章