java - 删除数组中的元素,这些元素是 Java 中其他元素的子串

标签 java string arraylist substring

我有一个字符串数组列表。我想删除作为该数组中另一个字符串的子字符串的字符串。我有一个 python 实现,但是使用 java 很棘手。 python

def filterSublist(lst):
 uniq = lst
 for elem in lst:
    uniq = [x for x in uniq if (x == elem) or (x not in elem)]
 return uniq

对于 java,我需要检查该元素是否包含在另一个元素中,如果是,则什么都不包含,如果不将它添加到另一个元素中。

for(String element : list){
    for(int j = 0; j < list.size(); j++)
        if (! element.contains(list.get(j))){
            listUniq.add(date);}
}

Java 解决方案无法正常工作。一个原因是它还将元素与元素本身进行比较。任何帮助表示赞赏。

最佳答案

在 Java 8 中,您可以直接使用 lambda 和流式 API:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Sample {

    public List<String> filterSublist(List<String> lst) {
        List<String> uniq = new ArrayList<String>(lst);
        lst.forEach(elem -> uniq.removeIf(x -> !x.equals(elem) && elem.contains(x)));
        return uniq;
    }

    public static void main(String[] args) {
        Sample sample = new Sample();

        List<String> filtered = sample.filterSublist(
            Arrays.asList("hello", "there", "the", 
                          "low", "hell", "lower", "here"));

        System.out.println(filtered); // [hello, there, lower]
    }
}

我刚刚否定了 removeIf() 方法中的谓词,因为我要删除元素而不是添加元素。

关于java - 删除数组中的元素,这些元素是 Java 中其他元素的子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29043177/

相关文章:

Java - Android Studio 中的网页抓取

java - 从Excel工作表内容生成XML

java - 根据映射内映射的键检索值

java - 将 ArrayList<ArrayList<String>> 转换为 ArrayList<ArrayList<Integer>>

java - Switch 的效率是否值得将其用于嵌套条件而不是 if、else?

java - 在 Glassfish 中使用来自急切获取的 JSF 托管 bean 的 spring bean 的问题

将输入字符串转换为 IP 地址格式

regex - 你如何在 Stata 中只提取字符串的大写部分?

python - Pandas datetime64 到字符串

java - 如何防止对象 ArrayList 中出现重复