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

  • HashSet

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

        List beforeList = new ArrayList();       

        beforeList.add("sun");

        beforeList.add("star");

        beforeList.add("moon");

        

        Set middleHashSet = new HashSet(beforeList);

        

        List afterHashSetList = new ArrayList(middleHashSet);

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

       List beforeList = new ArrayList();

        

        beforeList.add("sun");

        beforeList.add("star");

        beforeList.add("moon");

        

        Set middleLinkedHashSet = new LinkedHashSet(beforeList);

        

        List afterHashSetList = new ArrayList(middleLinkedHashSet);

 

  • Stream

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

list.stream().distinct();

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

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

List 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 list2 = new ArrayList();{

            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

 

你可能感兴趣的:(Java日常总结)