我有一个字符串数组列表。我想删除作为该数组中另一个字符串的子字符串的字符串。我有一个 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/