Java8 流 - 删除具有流独特性的重复项
2022-09-01 04:33:23
我有一个流,例如:
Arrays.stream(new String[]{"matt", "jason", "michael"});
我想删除以同一字母开头的名称,以便只留下一个以该字母开头的名称(无论哪个名称)。
我试图理解divate()
方法是如何工作的。我在文档中读到它基于对象的“equals”方法。但是,当我尝试包装字符串时,我注意到从不调用 equals 方法,并且不会删除任何内容。我在这里错过了什么吗?
包装类:
static class Wrp {
String test;
Wrp(String s){
this.test = s;
}
@Override
public boolean equals(Object other){
return this.test.charAt(0) == ((Wrp) other).test.charAt(0);
}
}
还有一些简单的代码:
public static void main(String[] args) {
Arrays.stream(new String[]{"matt", "jason", "michael"})
.map(Wrp::new)
.distinct()
.map(wrp -> wrp.test)
.forEach(System.out::println);
}