java - 从列表中删除几乎相同的字符串(名词复数形式)
问题描述
我正在尝试识别和删除列表中名词的复数形式。本质上,我希望通过以下测试:
@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;
}
我想可以通过添加来完成一些优化
if (word.endsWith("s")) {
continue;
}
for
循环中的第一个
推荐阅读
- android - 如何检查 SharedPreferences 字符串是否为空或 null
- php - 如何在 laravel 中返回包含空字符串而不是 NULL 的数据
- couchbase - Couchbase 压缩和数据丢失
- php - Telegram Bot 多次发送相同的消息 PHP
- jenkins - 我的赛普拉斯测试在 Jenkins 中失败,但在本地通过
- r - 无法在 Ubuntu 19.10 上安装 r-base;未满足的依赖关系 r-推荐
- kotlin - Kotlin 中相等运算符 (==) 导致编译错误的条件是什么?
- c++ - 这个带有模板的 C++ 代码片段有什么问题
- ios - 带有 VFL 约束的 iOS 多行文本
- elasticsearch - 如何在 elasticsearch 中摄取 .doc / .docx 文件?