ArrayList去重及排序

List去重

方法1:set集合去重,不打乱顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("aaa");
list.add("aba");
list.add("aaa");
 
Set<String> set = new HashSet<String>();
List<String> newList = new ArrayList<String>();
for (String s: list) {
    if (set.add(s)) {
        newList.add(s);
    }
}
System.out.println("去重后的集合: " + newList);

方法2:遍历后判断赋给另一个list集合

1
2
3
4
5
6
7
List<String> newList = new ArrayList<String>();
for (String s : list) {
    if (!newList.contains(s)) {
        newList.add(s);
    }
}
System.out.println("去重后的集合: " + newList);

方法3:set去重

1
2
3
4
5
Set<String> set = new HashSet<String>();
List<String> newList = new ArrayList<String>();
set.addAll(list);
newList.addAll(set);
System.out.println("去重后的集合: " + newList);

方法4:set去重(代码缩减为一行)

1
2
List<String> newList = new ArrayList<String>(new HashSet<String>(list));
System.out.println("去重后的集合: " + newList);

方法5:用JDK1.8 Stream中对List进行去重:list.stream().distinct();

1
2
3
4
5
6
List<String> a = new ArrayList<> ();
a.add("a");
a.add("b");
a.add("b");
List list=(List) a.stream().distinct().collect(Collectors.toList());
System.out.println(list);

List排序

使用Collections工具类的sort(List<T> list, Comparator<? super T> c)方法对List集合进行自定义排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Test
public void listCustomSort() {
    List<Person> list = new ArrayList<Person>();
    Person p1 = new Person("1", "p1" , 12);
    Person p2 = new Person("2", "p2" , 9);
    Person p3 = new Person("3", "p3" , 13);
    Person p4 = new Person("4", "p4" , 9);
    list.add(p1);
    list.add(p2);
    list.add(p3);
    list.add(p4);
     
    System.out.println(list);
    System.out.println("------------------");
     
    Collections.sort(list, new Comparator<Person>() {
        // 按年龄从大到小排序;
        //compareto就是比较两个数据的大小关系 大于0表示前一个数据比后一个数据大, 0表示相等,小于0表示第一个数据小于第二个数
        @Override
        public int compare(Person p1, Person p2) {
            return p1.getAge() == p2.getAge() ? 0 : (p1.getAge() < p2.getAge() ? 1 : -1);
        }
         
    });
     
    System.out.println(list);
}

 

  

posted @   江南大才子  阅读(641)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示