java - 如何比较两个数组列表并提取第三个数组列表中两者都不常见的元素
问题描述
我有两个包含一些元素的数组列表我正在比较两个数组列表的元素并尝试提取第三个数组列表中两个列表中不常见的元素。
这是我到目前为止所做的:
public class Details
{
public static void main(String [] args)
{
ArrayList<String> al1= new ArrayList<String>();
al1.add("hi");
al1.add("How are you");
al1.add("Good Morning");
al1.add("bye");
al1.add("Good night");
ArrayList<String> al2= new ArrayList<String>();
al2.add("Howdy");
al2.add("Good Evening");
al2.add("bye");
al2.add("Good night");
//Storing the comparison output in ArrayList<String>
ArrayList<String> al3= new ArrayList<String>();
for (String temp : al1)
al3.add(al2.contains(temp) ? "Yes" : "No");
System.out.println(al3);
}
}
输出
[No, No, No, Yes, Yes]
我不希望以是或否形式输出我希望新数组列表中的元素在两个列表中都不常见。
有人请让我知道我怎样才能达到预期的结果。任何帮助,将不胜感激。
谢谢
解决方案
首先,请编程到List
接口(而不是ArrayList
具体类型)。您还可以使用Arrays.asList
来缩短您的初始化。然后我会stream()
每个List
- 你想要过滤流中不包含在另一个元素中的元素List
,然后将它们添加到你的第三个List
。就像是,
List<String> al1 = Arrays.asList("hi", "How are you", "Good Morning", "bye", "Good night");
List<String> al2 = Arrays.asList("Howdy", "Good Evening", "bye", "Good night");
List<String> al3 = al1.stream().filter(s -> !al2.contains(s)).collect(Collectors.toList());
al3.addAll(al2.stream().filter(s -> !al1.contains(s)).collect(Collectors.toList()));
System.out.println(al3);
哪个输出
[hi, How are you, Good Morning, Howdy, Good Evening]
或者,没有流(这样你可以更好地理解算法),
List<String> al3 = new ArrayList<>();
for (String s : al1) {
if (!al2.contains(s)) {
al3.add(s);
}
}
for (String s : al2) {
if (!al1.contains(s)) {
al3.add(s);
}
}
System.out.println(al3);
推荐阅读
- python - tkinter 类继承没有显示任何内容
- c++ - 覆盖移动赋值运算符
- java - 发生 RuntimeException 时事务不回滚
- loadrunner - 加载ruenner Ajax真客户端协议脚本录制问题
- python - 如何在 Django Python 中使用检测意图(文本)?
- javascript - JSF inputHidden ,如何动态禁用它们?
- validation - 如何在 React Native 中单击按钮时显示错误?
- c# - 为什么不使用可设置属性覆盖 get-only 属性?
- c# - WPF 中的正则表达式
- database - 为什么不将集合的所有属性都定义为索引?