2

我正在尝试以下代码:

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)))
4

1 回答 1

2

您需要在您的类中正确实现equalsand ,这基于它所代表的单词的字符串内容。有了这些,将产生您所期望的结果。类似于以下内容就足够了。hashCodeWordList.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); }
}
于 2019-01-31T15:08:54.937 回答