如何将两个List合并,且其中不允许出现重复的项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将两个List合并,且其中不允许出现重复的项相关的知识,希望对你有一定的参考价值。

参考技术A 合并多个Excel工作表是一项常见的工作任务,当然,也有许多技巧来帮助完成这项任务。下面是一个简单的方法,利用Access来合并多个Excel文件。

在Access中创建对Excel工作簿的链接:在Access中选择“外部数据——导入——Excel”。

在“获取外部数据”对话框中选择“通过创建链接表来链接到数据源”。

必须为每个Excel工作簿重复该过程直到将它们都链接到数据库。

在SQL视图中开始新的查询,单击“创建——其他——查询设计”。

选择“查询工具-设计”中的“SQL视图”

在SQL视图中,为所有链接的Excel表输入Select语句,在每个Select语句间使用Union操作符,在SQL视图中输入选择查询语句

运行查询后,结果将是包含从所有链接的文件中获取并合并后的数据。

只要链接的Excel文件在相同的位置,每次打开数据库时Access将自动刷新链接以获取最新数据。这意味着只需设置一次,然后在每次需要重新组合Excel文件时运行联合查询。

然而,默认情况下,UNION操作符会移除数据中的任何重复行。如果知道数据中有重复行,并且想保留它们,那么需要使用UNION ALL,以允许传递重复行。

Java 8 lambda Stream list to Map key 重复 value合并到Collection

描述: 取list集合中两个字段,且将两个字段作为key ,map,利用steam流转为map集合,且满足key相同时,将value转为List集合

 

查询到资料 转自https://my.oschina.net/u/3725073/blog/1807970/

List<User> userList = new ArrayList<>();
        userList.add(new User(1L, "aaa"));
        userList.add(new User(2L, "bbb"));
        userList.add(new User(3L, "ccc"));
        userList.add(new User(2L, "ddd"));
        userList.add(new User(3L, "eee"));

 资料给出的解决方案

userList.stream().collect(Collectors.toMap(User::getId,
                e -> Arrays.asList(e.getUsername()),
                (List<String> oldList, List<String> newList) -> {
                    oldList.addAll(newList);
                    return oldList;
                }));

实际操作后

报空指针错误

解决方式

userList.stream().collect(Collectors.toMap(User::getId,
                e -> new ArrayList<>(Arrays.asList(e.getUsername())),
                (List<String> oldList, List<String> newList) -> {
                    oldList.addAll(newList);
                    return oldList;
                }));

拓展新需求 现在有一个集合List<Apple>的list,包括n个字段,
假设为四个字段 (name,type,size,color),List中apple的name字段有相同部分

又有一个Apple的dto,包括字段要比Apple中少,假设包括name和color字段,,现在要将List<Apple>转为Map,且Map的key为name,value为dto的集合(List<AppleDTO>)

该如何实现?
Map<String, List<AppleDTO>> map = list.stream().collect(Collectors.toMap(Apple::getName,
e -> new ArrayList<>(Arrays.asList(new AppleDTO(e.getName(), e.getColor()))),
(List<AppleDTO> oldList, List<AppleDTO> newList) -> {
                    oldList.addAll(newList);
                    return oldList;
                }));

注意:此时有个dto的构造方法,所以dto类中得有这个构造方法才行,感觉不用讲啊,都学到lambda了,都懂的

public AppleDTO(string name,string color){

  this.name = name;

  this.color = color;

}

 

 

 

 

以上是关于如何将两个List合并,且其中不允许出现重复的项的主要内容,如果未能解决你的问题,请参考以下文章

多表合并且去掉重复项

合并两个数组,并且把相同的数值覆盖掉

如何删除已经在list中的重复项

java List合并相同的项的问题?

Java 8 lambda Stream list to Map key 重复 value合并到Collection

数据结构 将两个递增的有序链表合并为一个递增的有序链表。要求结果仍使用原来的两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复数据。