从Java中具有不同大小的2个数组列表中查找非相似元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Java中具有不同大小的2个数组列表中查找非相似元素相关的知识,希望对你有一定的参考价值。

我有两个字符串类型的数组列表:

列出 - > [芒果,香蕉,苹果]

列表b - > [男人,苹果]

我必须从两个列表中找出不相似的元素。

直到我实现了这个:

List d = new ArrayList(a);
toReturn.removeAll(b);
return d;

但是这个代码的问题在于我不希望Mango作为列表b中的第一个元素包含“Man”字符串。我只想要“香蕉”归来。

答案

你可以迭代一个列表并找到其中不是另一个列的子串的项,然后当然反转的参数相同:

private static Stream<List> filterNonSimilar(List<String> a, List<String> b) {
    return a.stream()
            .filter(ai -> b.stream().noneMatch(bi -> ai.contains(bi) || bi.contains(ai));
}

public static List<String> nonSimilar(List<String> a, List<String> b) {
    return Stream.concat(filterNonSimilar(a, b), filterNonSimilar(b, a))
                 .collect(Collectors.toList());
}
另一答案

你已经迭代了一个列表,然后必须在另一个列表中进行比较,如果存在于第二个列表中,则删除元素(反之亦然),下面我分享这种方法的示例代码。

public class Comp {

public static void main(String... strings) {

    List<String> lis1 = new ArrayList<>();
    lis1.add("applefy");
    lis1.add("boy");
    lis1.add("carrr");

    List<String> lis2 = new ArrayList<>();
    lis2.add("apple");
    lis2.add("car");

    List<String> result = new ArrayList<>();
    for (String a : lis1) {

        for (String b : lis2) {
            if (a.contains(b)) {
                result.add(a);
               }

        }

    }

    lis1.removeAll(result);

    System.out.println(lis1);

}

输出:[男孩]

希望这会有所帮助。

以上是关于从Java中具有不同大小的2个数组列表中查找非相似元素的主要内容,如果未能解决你的问题,请参考以下文章

从两个角度理解为什么 JS 中没有函数重载

在 python 列表中查找相似条目

C++中重载函数详解

如果列表中的文本具有相似的路径,如何查找

从字典列表中查找值,其中dicts具有不同数量的键

从 Postgres 中的非结束日期范围列表中查找未覆盖的日期范围