java8 stream源码中stream.collect(Collectors.toList())去重
**
利用 java8 stream对list或者set中带有(“aaa”,“88888”)等复杂字段去重。如若失败可能是equals方法原因,需要重写hashCode(), equals(Object obj)方法。
测试发现如果hashCode()的字段为Long类型,即不是String的话equals(Object obj)方法中的this.id==other.getId()应将换成this.id.equals(other.getId(),测试即可成功。
需要的朋友可可参考一下如下代码。
菜鸟小白zzh分享
复制代码
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68package zzh; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class Test { public static void main(String[] args) { EqualsObj obj1 =new EqualsObj("1","xxx"); EqualsObj obj2 =new EqualsObj("1","88888"); EqualsObj obj3 =new EqualsObj("2","xxx"); List<EqualsObj> list = new ArrayList<>(); list.add(obj1); list.add(obj2); list.add(obj3); list = list.stream().distinct().collect(Collectors.toList()); Set<EqualsObj> set = new HashSet<>(); set.add(obj1); set.add(obj2); set.add(obj3); } static class EqualsObj{ private String id; private String name; public EqualsObj(String id,String name){ this.id = id; this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int hashCode() { int result = 17; result = 31 * result + (id == null ? 0 : id.hashCode()); return result; } @Override public boolean equals(Object obj) { //地址相等 if(this == obj){ return true; } if(obj == null){ //非空性:对于任意非空引用x,x.equals(null)应该返回false。 return false; } if(obj instanceof EqualsObj){ EqualsObj other = (EqualsObj) obj; //需要比较的字段相等,则这两个对象相等 if(this.id==other.getId()){ return true; } } return false; } } }
最后
以上就是单薄咖啡最近收集整理的关于stream.collect(Collectors.toList())去重问题的全部内容,更多相关stream内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复