首页 > 其他分享 >集合的工具类Collections

集合的工具类Collections

时间:2022-11-23 13:24:19浏览次数:31  
标签:sort list private Collections User 集合 new 工具

Collections

数组的工具Arrays,集合的工具类Collections

public static <T> boolean addAll(Collection<? super T> c, T... elements)
    //向指定集合里面添加元素:
private static void demo4() {
    List<Integer> list=new ArrayList<>(10);
    Collections.addAll(list,10,89,32,4,21,54,3,12,5);
    System.out.println(list);
}

当集合是线程不安全的时候可以用collections的方法来将线程变得安全:

List<User> list1=Collections.synchronizedList(new ArrayList<>(10));
//将线程不安全的集合,转换成线程安全

打乱集合中元素的顺序:

Collections.shuffle(list);//打乱集合中元素顺序

我需要对结果进行排序:

comparable

Collections.sort();
private static void demo4() {
    List<Integer> list=new ArrayList<>(10);
    Collections.addAll(list,10,89,32,4,21,54,3,12,5);
    Collections.sort(list);
    System.out.println(list);//[3, 4, 5, 10, 12, 21, 32, 54, 89]
}

前面也说过,是因为该类型实现了comparable,并且重写了里面的compare方法 ,但是换成是没有实现排序的类型呢?

@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User implements Comparable<User>  {
    private String name;
    private Integer id;
    private Integer age;

    @Override
    public int compareTo(User user) {
        return this.age.compareTo(user.age);
    }
}
private static void demo3() {
    List<User> list=new ArrayList<>(10);
   Collections.addAll(list,
           new User("tom",3627,21),
           new User("jack",3526,20),
           new User("jim",2540,23),
           new User("jerry",3552,15),
           new User("tom",9584,15)
           );
   //按照年龄升序排列
    Collections.sort(list);
    list.forEach(System.out::println);
}

如果年龄相等的话按照id来进行降序排列:

public class User implements Comparable<User>  {
    private String name;
    private Integer id;
    private Integer age;
    @Override
    public int compareTo(User user) {
        int i = this.age.compareTo(user.age);
        if(i==0){
           i= user.id.compareTo(this.id);
        }
        return i;
    }
}

上面用的是内部比较器,在类的内部实现接口,改变类的结构从而实现排序,那么下面我们用外部比较器的方式来进行比较

comparator

使用list自带的sort来进行排序:

private static void demo3() {
    List<User> list=new ArrayList<>(10);
   Collections.addAll(list,
           new User("tom",3627,21),
           new User("jack",3526,20),
           new User("jim",2540,23),
           new User("jerry",3552,15),
           new User("tom",9884,15)
           );
   list.sort((user1,user2)-> {
       int i= (user1.getAge().compareTo(user2.getAge()));
        if(i==0){
            i=user2.getId().compareTo(user1.getId());
        }
           return i;

   });
    list.forEach(System.out::println);
}

也可以直接调用comparator里面的静态方法:

语法:

集合.sort(Comparator.comparing(泛型对象::想要排序的元素));

list.sort(Comparator.comparing(User::getAge));
list.forEach(System.out::println);

如果后面还想继续根据id排序,可以用thenCompararing()

list.sort(Comparator.comparing(User::getAge).thenComparing(User::getId));
list.forEach(System.out::println);

标签:sort,list,private,Collections,User,集合,new,工具
From: https://www.cnblogs.com/Liku-java/p/16917962.html

相关文章

  • 属性还是servlet参数,报表工具功能点控制方式探讨
        在皕杰报表工具规划的新版本中,拟将带有查询表单的报表是否根据缺省参数值自动查询的设置放到报表查询表单属性里去设置,原来版本中这个功能点是通过在url中后跟se......
  • 005. MyBatis介绍---02初始化工具类MyBatisUtils
    1.什么是SqlSessionFactory  2.src/main/java/com/imooc/mybatis/utils/MyBatisUtils.javapackagecom.imooc.mybatis.utils;importorg.apache.ibatis.io.Resou......
  • Java 用Lambda实现一个通用的制造者工具
    在我们日常开发中,虽然是用了lombok在实体类中已经帮我们省了get、set方法,但是在公司的项目中,还是经常会出现new一个对象然后一个个的给它set值的情况,太丑了,如下图List<St......
  • python打包工具distutils
    参考: http://www.cppcns.com/jiaoben/python/225742.htmlpython源码包安装:pythonsetup.pyinstalldistutilsdistutils是python标准库的一部分,这个库的目的是为开......
  • linux文本工具
    目录一、文本工具 1一、文本编辑工具Vim 1二、文本文件查看命令cat 3三、more命令描述:more命令从前向后分页显示文件内容。 4四、Less命令描述 4五、head命令描述 5六、s......
  • Go语言SQL语句到结构体的转换命令行工具
    学习:SQL语句到结构体的转换|Go语言编程之旅(eddycjy.com)目标:SQL表转换为Go语言结构体可以在线体验这个过程:SQL生成GO语言结构体-支持批量处理(tl.beer)MySQL数......
  • GitHub原生AI代码生成工具Copilot,官方支持Visual Studio 2022
    人工智能程序员GitHubCopilot,在VisualStudio2022中推出,不过用户必须在主页注册报名,才有机会访问试用。现在,微软、OpenAI、GitHub三家联合打造的AI编程辅助工具G......
  • 瓴羊Quick BI工具,为数据分析人员带来帮助
    一个企业的数字化管理水平如何,和企业内部的发展情况都是密切相关的。为了企业的各部分发展可以进展到更好的状态,确实应该从多个角度来注意这些涉及到的情况。其中关注数据分......
  • [工具问题] docker.mysql8 Public Key Retrieval is not allowed
    TochangethesettingsonDbeaver:Rightclickyourconnection,choose"EditConnection"Onthe"Connectionsettings"screen(mainscreen)clickon"EditD......
  • 基础代码-维护集合
    问题C:维护集合时间限制:1Sec  内存限制:512MB题目描述维护一个字符串集合:初始为空,依次处理一些插入操作,并在插入之后输出该字符串在集合中出现的次数。......