-
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 |