Java 从列表中删除几乎相同的字符串(名词复数形式)
我试图识别并删除列表中名词的复数形式。基本上,我希望通过以下测试:Java 从列表中删除几乎相同的字符串(名词复数形式),java,Java,我试图识别并删除列表中名词的复数形式。基本上,我希望通过以下测试: @Test public void testRemoveNounPlurals(){ List<String> listWithDups = List.of("friend", "friends", "dog", "dogs", "serious"); List<String> filteredList = removeDuplicates(listWithDups); // testi
@Test
public void testRemoveNounPlurals(){
List<String> listWithDups = List.of("friend", "friends", "dog", "dogs", "serious");
List<String> filteredList = removeDuplicates(listWithDups); // testing this method
org.assertj.core.api.Assertions.assertThat(filteredList)
.hasSize(3)
.containsOnly("friend", "dog", "serious");
}
不完全执行:
public static List<String> removeDuplicates(List<String> list) {
List<String> maybePlurals = list.stream()
.filter(s -> s.endsWith("s"))
.collect(toList()); // friends, dogs, serious
return list.stream()
// correctly removes friends and dogs, should keep 'serious'
.filter( word -> maybePlurals.contains(word.concat("s")))
.collect(toList());
}
此解决方案向每个单词添加一个s,并检查它是否存在,如果存在,则将其删除
public static List<String> removeDuplicates(List<String> list) {
List<String> result = new ArrayList<>();
result.addAll(list);
for (String word : list) {
String words = word + "s";
result.remove(words);
}
return result;
}
首先进入for循环谢谢。我就是无法摆脱这么简单的任务。对于任何感兴趣的人,都可以使用list.stream.filterword->编写For循环!word.endsWiths.mapword->word+s.forEachresult::remove;
if (word.endsWith("s")) {
continue;
}