首页 > 编程语言 >java.util.Collection集合方法:Collections.BinarySearch 方法

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

时间:2024-11-15 10:45:38浏览次数:1  
标签:java sum list Collection BinarySearch ApiMonthTcDto import new

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

        }



    }
}

 

标签:java,sum,list,Collection,BinarySearch,ApiMonthTcDto,import,new
From: https://www.cnblogs.com/pingguomang/p/18547557

相关文章

  • 使用Java爬虫技术高效获取电商平台商品历史价格信息
    在电商领域,商品的历史价格信息对于消费者制定购买决策具有重要意义。本文将介绍如何利用Java爬虫技术,通过API接口高效地获取店铺所有商品的详细信息。我们将使用Java语言,结合HttpClient库和JSON解析库,展示从API请求数据到数据处理的整个过程。理解API接口API(应用程序编程接......
  • JavaIO流
    Java的I/O(输入/输出)流是用于处理数据输入和输出的强大机制,是Java标准库中的一个重要部分。下面是一些关键知识点和总结:1.基本概念‌流(Stream)‌:流是一组有序的数据序列,从数据源流向数据目的地。Java中的I/O流主要用于处理文件、网络、内存等数据源和数据目的地之间的......
  • 基于Java+SpringBoot+Vue+HTML5电影订票系统(源码+LW+调试文档+讲解等)/电影订票/电影
    博主介绍......
  • 基于Java+SpringBoot+Vue+HTML5课程设计选题管理(源码+LW+调试文档+讲解等)/课程设计/
    博主介绍......
  • 重生之我在学Java算法系列(一)
    一.题目评委打分需求:在唱歌比赛中,有6名评委给选手打分,分数范围是(0-100]之间的整数。选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分二.做一道题目最重要的点在于需求分析如题一所示首先我们需要什么六名评委的分数第二......
  • JavaScript常用对象方法二:数组(array)
    1.concat()用于连接两个或多个数组。该方法不会改变现有的数组,而是返回一个新的数组。个人感觉es6出来的扩展运算符比这个方法要简洁一些扩展运算符的方法:constarr1=[1,2];constarr2=[3,4];constarr3=[...arr1,...arr2];console.log(arr3);//[1,2,......
  • Java:An attempt was made to call a method that does not exist. The attempt was ma
    1.问题描述一个字段的类型从int变成了bigint,实体类也要同步更新为Long。修改完后只更新了这个类,结果运行就报错了。根据日志来看说“EntityKsGc.getKscc()Ljava/lang/Long;”这个方法不存在,但就是修改这个类,改成了Long类型,确确实实存在,另外从eclipse来看,也只提示修改了......
  • Java8实战笔记(四)
    一、并行数据处理与性能并行流通过对收集源调用parallelStream方法来把集合转换为并行流。并行流就是一个把内容分成多个数据块,并用不同的线程分别处理每个数据块的流。//返回从1到给定参数n的所有数字之和//顺序流publicstaticlongsequentialSum(longn){......
  • JAVA的概述,安装与第一个Java程序
    Java的发展史1991年sun公司的工程师小组需要设计一种小型计算机语言,主要用于计算处理能力和内存都非常有限的小型消费类电子产品像:电视机机顶盒,家用电器。另外由于不懂厂商选择不同的cpu,因此这类语言必须能生成非常紧密的代码保证保证在小型电器上运行,而且还要要求这种语言不......
  • 实战指南:理解 ThreadLocal 原理并用于Java 多线程上下文管理
    目录一、ThreadLocal基本知识回顾分析(一)ThreadLocal原理(二)既然ThreadLocalMap的key是弱引用,GC之后key是否为null?(三)ThreadLocal中的内存泄漏问题及JDK处理方法(四)部分核心源码回顾ThreadLocal.set()方法源码详解ThreadLocalMap.get()方法详解ThreadLocal.remove()方法源......