为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红颜莎娜 2021-09-12 19:57:29
我有两个字符串类型的数组列表:列出一个 -> [芒果、香蕉、苹果]列表 b -> [Man, Apple]我必须从两个列表中找出不相似的元素。直到我实现了这个:List d = new ArrayList(a);toReturn.removeAll(b);return d;但是这段代码的问题是我不希望 Mango 作为列表 b 中的第一个元素包含“Man”字符串。我只想要返回“香蕉”。
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

您可以遍历一个列表并找到其中不是另一个列表的子字符串的项目,然后当然可以将参数颠倒过来:


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());

}


查看完整回答
反对 回复 2021-09-12
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

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


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);


}

} 输出:[男孩]


希望这会有所帮助。


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 198 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信