Java合并两个List后并去掉重复项的两种做法
前言
工作中很多时候需要用到合并两个List并去除其中的重复内容,这是一个很简单的操作,实现的方法也多种多样。
下面以具体实例展示给大家~
一、使用stream方式进行去重(需要jdk1.8及以上)
String[] arr1 = {"a", "b", "c", "d", "e", "f"}; List<String> listA = new ArrayList<>(Arrays.asList(arr1)); String[] arr2 = {"d", "e", "f", "g", "h"}; List<String> listB = new ArrayList<>(Arrays.asList(arr2)); List<String> collect = Stream.of(listA, listB) .flatMap(Collection::stream) .distinct() .collect(Collectors.toList());
可以很清楚的看出通过Stream完成的代码看上去更加简洁流畅
二、使用HashSet集合的方式进行去重
String[] arr1 = {"a", "b", "c", "d", "e", "f"}; List<String> listA = new ArrayList<>(Arrays.asList(arr1)); String[] arr2 = {"d", "e", "f", "g", "h"}; List<String> listB = new ArrayList<>(Arrays.asList(arr2)); Set<String> set = new HashSet<>(listA); set.addAll(listB); List<String> list = new ArrayList<>(set); System.out.println(list);
这样做后的list就是合并并去重后的结果
附:利用Java 8的Map.merge()方法
Java 8中的Map类提供了一个merge()方法,可以方便地对Map中的键值对进行合并操作。我们可以先将需要保留的List中的元素转换成一个Map,然后遍历另一个List进行合并操作。
示例代码如下:
使用 Java 8 的 Stream API,结合 Collectors.toMap() 和 merge() 方法来实现。具体实现步骤如下:
将两个 list 合并为一个 list;
将合并后的 list 转为 Stream;
使用 Collectors.toMap() 方法将 Stream 中的元素转为 Map;
在 toMap() 方法中指定 key 和 value,对于重复的 key,使用 merge() 方法合并 value;
将 Map 中的 value 转为 list,作为最终的结果。
下面是代码示例:
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class MergeListExample { public static void main(String[] args) { List<String> list1 = new ArrayList<>(); list1.add("A"); list1.add("B"); list1.add("C"); list1.add("D"); List<String> list2 = new ArrayList<>(); list2.add("C"); list2.add("D"); list2.add("E"); list2.add("F"); List<String> mergedList = mergeLists(list1, list2); System.out.println("Merged list with duplicates: " + mergedList); List<String> distinctList = mergedList.stream().distinct().collect(Collectors.toList()); System.out.println("Distinct merged list: " + distinctList); } private static List<String> mergeLists(List<String> list1, List<String> list2) { List<String> mergedList = new ArrayList<>(list1); mergedList.addAll(list2); Map<String, String> map = mergedList.stream() .collect(Collectors.toMap(s -> s, s -> s, (s1, s2) -> s1)); return new ArrayList<>(map.values()); } }
该示例中,我们首先定义了两个 list,然后调用了 mergeLists() 方法来合并两个 list 并去重。在该方法中,我们先将两个 list 合并为一个 list,然后将其转为 Stream。接着使用 Collectors.toMap() 方法将 Stream 中的元素转为 Map,并在 toMap() 方法中指定 key 和 value,对于重复的 key,使用 merge() 方法合并 value。最后将 Map 中的 value 转为 list,作为最终的结果。
输出结果如下:
Merged list with duplicates: [A, B, C, D, C, D, E, F]
Distinct merged list: [A, B, C, D, E, F]
总结
到此这篇关于Java合并两个List后并去掉重复项的两种做法的文章就介绍到这了,更多相关Java合并List并去掉重复项内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
浅谈SpringMVC的拦截器(Interceptor)和Servlet 的过滤器(Filter)的区别与联系 及Spr
这篇文章主要介绍了浅谈SpringMVC的拦截器(Interceptor)和Servlet 的过滤器(Filter)的区别与联系 及SpringMVC 的配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-07-07Java中的字符型文件流FileReader和FileWriter详细解读
这篇文章主要介绍了Java中的字符型文件流FileReader和FileWriter详细解读,与字节型文件流不同,字节型文件流读取和写入的都是一个又一个的字节,而字符型文件流操作的单位是一个又一个的字符,字符型流认为一个字母是一个字符,而一个汉字也是一个字符,需要的朋友可以参考下2023-10-10MybatisPlus查询条件为空字符串或null问题及解决
这篇文章主要介绍了MybatisPlus查询条件为空字符串或null问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-06-06Java 设置Excel条件格式示例代码(高亮条件值、应用单元格值/公式/数据条等类型)
这篇文章主要介绍了Java 设置Excel条件格式示例代码(高亮条件值、应用单元格值/公式/数据条等类型),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01
最新评论