我正在尝试下面的代码:
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
类中正确实现 equals
和 hashCode
,这是基于它所包含的单词的字符串内容。代表。完成后,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/