java - 从列表中删除几乎相同的字符串(名词复数形式)

标签 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循环中

关于java - 从列表中删除几乎相同的字符串(名词复数形式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60251692/

相关文章:

java - 当我们显式调用垃圾收集器方法时会发生什么?

java - Rythm模板引擎自定义标签加载

具有随机种子的 Java TreeMap 没有固定大小

java - 使用java将原始xml字符串直接发送到soap服务

java - 如何将 Java 代码与 Azure Cosmos DB 连接?

java - 创建具有指定类型的集合(例如 map ) - 不使用通用对象类

java - 如何在 Selenium Web 驱动程序中单击下一个 span 元素

java - JSP 表达式语言中的数组文字?

Java:显示由字符组成的奇数直角三角形

java - 如何将姓名以及电子邮件和密码添加到 firebase 数据库 android