Группировка строк в Вавре - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь этот код ниже:

final Map<Word, List<Word>> tuple2s = lowercase
            .groupBy(identity());

, но это создает группы из одной строки, в основном, как делать #split:

LinkedHashMap((lorem, List(lorem)), (ipsum, List(ipsum)), (lorem, List(lorem)), (lorem, List(lorem)), (ipsum, List(ipsum)), (dolor, List(dolor)), (sit, List(sit)), (dolor, List(dolor)), (sit, List(sit)), (dolor, List(dolor)), (elit, List(elit)))

Как это исправить?Ожидаемое значение

LinkedHashMap((lorem, List(lorem, lorem, lorem)), (ipsum, List(ipsum, ipsum)), (dolor, List(dolor, dolor, dolor)), (sit, List(sit, sit)), (elit, List(elit)))

1 Ответ

0 голосов
/ 31 января 2019

Вам нужна правильная реализация equals и hashCode в вашем классе Word, которая основана на строковом содержании слова, которое оно представляет.С этим на месте List.groupBy(...) приведет к тому, что вы ожидаете.Достаточно чего-то похожего на следующее.

public class Word {
    private String word;

    public Word(String word) { this.word = word; }

    @Override
    public String toString() { return word; }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Word other = (Word) o;
        return Objects.equals(word, other.word);
    }

    @Override
    public int hashCode() { return Objects.hash(word); }
}
...