私は、次のような流れを持っている:Java8ストリームは - 個別ストリームに重複を削除
Arrays.stream(new String[]{"matt", "jason", "michael"});
私は1つの名前のみが始まる(これは問題ではない)ように、同じ文字で始まる名前を削除したいですその手紙は残されています。
私はdistinct()
メソッドの仕組みを理解しようとしています。私はオブジェクトの "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);
}
私は、[この回答](http://stackoverflow.com/a/27872086/1441122)に記載の技術があります。 (答えの最後までスクロールします)。これにより 'filter(distinctByKey(s - > s.charAt(0)))'を行うことができます。 –
サイドノート:リテラルのストリームのために、 'Stream.of(" matt "、" jason "、" michael ")'を使う方がしばしばです。 –