У меня есть поток, например:
Arrays.stream(new String[]{"matt", "jason", "michael"});
Я хотел бы удалить имена, начинающиеся с того же письма, чтобы осталось только одно имя (не имеет значения, какое), начиная с этой буквы.
Я пытаюсь понять, как работает метод distinct()
. Я прочитал в документации, что он основан на методе "равно" объекта. Однако, когда я пытаюсь обернуть String, я замечаю, что метод equals никогда не вызывается и ничего не удаляется. Здесь что-то не хватает?
Класс Wrapper:
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);
}