java - 在 Vavr 中将字符串分组在一起

标签 java functional-programming vavr

我正在尝试下面的代码:

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

最佳答案

您需要在 Word 类中正确实现 equalshashCode,这是基于它所包含的单词的字符串内容。代表。完成后,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); }
}

关于java - 在 Vavr 中将字符串分组在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54461652/

相关文章:

java - DBUnit:任何支持 Oracle PLSQL 的内存数据库吗?

python - 装饰器 : TypeError: "got multiple values for keyword argument <variable name>" on function call

kotlin - 折叠返回中间结果而不仅仅是最后一个结果

java - Vavr 的内存似乎不一致

java - 具有泛型的 Vavr 给出了不兼容的类型

java - Android Studio音板: How to start a loop with a mediaplayer button?

java - java.util.queue 的实现如何使用 LIFO?

python - 为什么 Python 的列表推导式不复制参数以便实际对象不能被改变?

java - 如何根据 Option 值获得 Either left/right

java - 如何将内容为XML格式的String转成JDom文档