arraylist,去重,计数重复数据出现次数

  • HashSet

1.HashSet不会存在相同的元素,可以利用这一点去除List中的重复元素,但是不保证数据的顺序。

        List<String> beforeList = new ArrayList<String>();       

        beforeList.add("sun");

        beforeList.add("star");

        beforeList.add("moon");

        

        Set<String> middleHashSet = new HashSet<String>(beforeList);

        

        List<String> afterHashSetList = new ArrayList<String>(middleHashSet);

2.LinkedHashSet不会存在相同的元素,同时也可保证顺序。

       List<String> beforeList = new ArrayList<String>();

        

        beforeList.add("sun");

        beforeList.add("star");

        beforeList.add("moon");

        

        Set<String> middleLinkedHashSet = new LinkedHashSet<String>(beforeList);

        

        List<String> afterHashSetList = new ArrayList<String>(middleLinkedHashSet);

  • Stream

在JDK1.8中 Stream中对List进行去重

list.stream().distinct();

首先获得此list的Stream.然后调用distinct()方法。

java8中提供流的方式对数据进行处理,非常快,底层用的是forkJoin框架,提供了并行处理,使得多个处理器同时处理流中的数据,所以耗时非常短。

List<String> list = Arrays.asList("AA", "BB", "CC", "BB", "CC", "AA", "AA","DD");

        long l = list.stream().distinct().count();

        System.out.println("唯一数据个数为:"+l);

        String output = list.stream().distinct().collect(Collectors.joining(","));

        System.out.println(output);

list.stream().distinct().forEach(System.out::println);

 

唯一数据个数为:4

AA,BB,CC,DD

AA

BB

CC

DD

但是无法对实体类集合进行去重。

List<Test> list2 = new ArrayList<Test>();{

            list2.add(new Test(1, "123"));

            list2.add(new Test(2, "123"));

            list2.add(new Test(3, "789"));

            list2.add(new Test(4, "456"));

            list2.add(new Test(5, "123"));

        }

        long l2 = list2.stream().distinct().count();

        System.out.println("No. of distinct Test:"+l2);

        list2.stream().distinct().forEach(b -> System.out.println(b.getId()+ "," + b.getName()));

 

No. of distinct Test:5

1,123

2,123

3,789

4,456

5,123

发布了21 篇原创文章 · 获赞 0 · 访问量 2274

猜你喜欢

转载自blog.csdn.net/hfaflanf/article/details/101701195