文
章
目
录
章
目
录
学习如何将两个ArrayList合并成的单个ArrayList。还学习如何在组合列表中合并ArrayList而不包括重复项。
1.合并两个ArrayList并保留所有元素
这种方法保留来自两个列表的所有元素,包括重复元素。合并列表的大小将是两个列表大小的算术和。
1.1. 使用List.addAll()
addAll()方法是将给定列表的所有元素附加到另一个列表末尾的最简单方法。使用此方法,我们可以将多个列表合并成一个单一列表。
// 合并Arraylist示例
ArrayList<String> listOne = new ArrayList<>(Arrays.asList("a", "b", "c"));
ArrayList<String> listTwo = new ArrayList<>(Arrays.asList("c", "d", "e"));
listOne.addAll(listTwo); //合并两个List
System.out.println(listOne);
System.out.println(listTwo);
程序输出:
[a, b, c, c, d, e]
[c, d, e]
提示:使用像guava或Apache commons lang这样的库可以有更多合并列表的方法,但它们都只使用addAll()方法。因此,最好直接使用此方法。
1.2. 使用Stream.flatMap()
Java 8流提供了解决大多数问题的一行解决方案,同时代码看起来更清晰。Stream的flatMap()方法可用于在单个流中获取两个或更多列表的元素,然后将流元素收集到ArrayList中。
推荐使用Stream,因为我们无需修改原始的List实例,而是创建一个包含来自两个列表的元素的第三个List。
ArrayList<String> listOne = new ArrayList<>(Arrays.asList("a", "b", "c"));
ArrayList<String> listTwo = new ArrayList<>(Arrays.asList("c", "d", "e"));
List<String> combinedList = Stream.of(listOne, listTwo)
.flatMap(x -> x.stream())
.collect(Collectors.toList());
System.out.println(combinedList);
程序输出:
[a, b, c, c, d, e]
在这些示例中,我们合并了列表,但在最终列表中有重复的元素。在许多情况下,这可能不是期望的输出。接下来,我们将学习如何合并这些List,并去除重复项。
2.合并两个ArrayList,排除重复元素
要获得合并列表中排除重复元素的列表,有两种方法:
2.1. 使用LinkedHashSet
Java Sets仅允许唯一的元素。当我们将两个列表都放入一个Set中,该Set将表示组合的所有唯一元素的列表。在我们的示例中,我们使用LinkedHashSet,因为它还将保留元素的顺序。
ArrayList<String> listOne = new ArrayList<>(Arrays.asList("a", "b", "c"));
ArrayList<String> listTwo = new ArrayList<>(Arrays.asList("c", "d", "e"));
//将 List中的项添加到Set中
Set<String> set = new LinkedHashSet<>(listOne);
set.addAll(listTwo);
//将 Set 转换为 ArrayList
ArrayList<String> combinedList = new ArrayList<>(set);
System.out.println(combinedList);
程序输出:
[a, b, c, d, e]
2.2. 使用removeAll/addAll
这是一个两步过程,我们可以
- 从第一个列表中删除第二个列表的所有元素
- 然后将第一个列表添加到第二个列表中。
这将为用户提供不包含重复元素的合并列表。
ArrayList<String> listOne = new ArrayList<>(Arrays.asList("a", "b", "c"));
ArrayList<String> listTwo = new ArrayList<>(Arrays.asList("c", "d", "e"));
List<String> listTwo = new ArrayList<>(listTwo);
listTwoCopy.removeAll(listOne);
listOne.addAll(listTwoCopy);
System.out.println(listOne);
程序输出:
[a, b, c, d, e]
以上就是Java中如何合并两个ArrayList的全部内容。