java 实现多个list 合并成一个去掉重复的案例

我就废话不多说了,大家还是直接看代码吧~

 public static void main(String[] args){
    List<Integer> list1 = new ArrayList<Integer>();
    list1.add(1);
    list1.add(2);
    list1.add(3);
    list1.add(4);
    List<Integer> list2 = new ArrayList<Integer>();
    list2.add(1);
    list2.add(4);
    list2.add(7);
    list2.add(10);
    List<Integer> listAll = new ArrayList<Integer>();
    listAll.addAll(list1);
    listAll.addAll(list2);
    listAll = new ArrayList<Integer>(new LinkedHashSet<>(listAll));
    System.out.println(listAll);
  }

输出:

[1, 2, 3, 4, 7, 10]

代码要典:

1、合并 使用java.util.List.addAll(Collection<? extends Integer>)

2、去重,借助LinkedHashSet

补充知识:java8 lambda小试牛刀,利用Stream把list转map,并将两个list的数据对象合并起来

我就废话不多说了,大家还是直接看代码吧~

public static void main(String[] args) {
		// 集合1
		List<SkillUpgrade> lists = new ArrayList<>();
		SkillUpgrade s = new SkillUpgrade();
		s.setLv(1);
		s.setAppearNum(100);
		lists.add(s);
		SkillUpgrade s2 = new SkillUpgrade();
		s2.setLv(2);
		s2.setAppearNum(200);
		lists.add(s2);
		// 集合1
		List<SkillUpgrade> listx = new ArrayList<>();
		SkillUpgrade x = new SkillUpgrade();
		x.setLv(1);
		x.setSelectNum(1100);
		listx.add(x);
		SkillUpgrade x2 = new SkillUpgrade();
		x2.setLv(2);
		x2.setSelectNum(1200);
		listx.add(x2);
		// 把list转map,{k=lv,vaule=并为自身} . SkillUpgrade->SkillUpgrade或Function.identity()
		Map<Integer, SkillUpgrade> map = listx.stream()
				.collect(Collectors.toMap(SkillUpgrade::getLv, SkillUpgrade -> SkillUpgrade));
		System.out.println("map:="+map);
		// 合并
		lists.forEach(n -> {
			// 如果等级一致
			if (map.containsKey(n.getLv())) {
				SkillUpgrade obj = map.get(n.getLv());
				// 把数量复制过去
				n.setSelectNum(obj.getSelectNum());
			}
		});
		System.out.println("lists:="+lists);
		// 重复问题
		Map<Integer, SkillUpgrade> keyRedo = listx.stream()
				.collect(Collectors.toMap(SkillUpgrade::getLv, Function.identity(), (key1, key2) -> key2));
		// 方式二:指定实例的map
		Map<Integer, SkillUpgrade> linkedHashMap = listx.stream().collect(Collectors.toMap(SkillUpgrade::getLv,
				SkillUpgrade -> SkillUpgrade, (key1, key2) -> key2, LinkedHashMap::new));
	}

	/**
	 * output:map:={1=SkillUpgrade [skillId=null, skillName=null, lv=1, persNum=null, selectNum=1100, appearNum=null], 2=SkillUpgrade [skillId=null, skillName=null, lv=2, persNum=null, selectNum=1200, appearNum=null]}
   *    lists:=[SkillUpgrade [skillId=null, skillName=null, lv=1, persNum=null, selectNum=1100, appearNum=100], SkillUpgrade [skillId=null, skillName=null, lv=2, persNum=null, selectNum=1200, appearNum=200]]
	 */

输出结果:

map:={1=SkillUpgrade [skillId=null, skillName=null, lv=1, persNum=null, selectNum=1100, appearNum=null], 2=SkillUpgrade [skillId=null, skillName=null, lv=2, persNum=null, selectNum=1200, appearNum=null]}

lists:=[SkillUpgrade [skillId=null, skillName=null, lv=1, persNum=null, selectNum=1100, appearNum=100], SkillUpgrade [skillId=null, skillName=null, lv=2, persNum=null, selectNum=1200, appearNum=200]]

以上这篇java 实现多个list 合并成一个去掉重复的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 快速解决List集合add元素,添加多个对象出现重复的问题

    首先我们在new 一个对象的时候,对象的id是唯一确定的:将对象add入list中时,放入list中的其实是对象的引用 :而每次循环只是简单的set 对象的属性,set新的属性值,而add进list中的对象还是同一个对象id,也就是同一个对象: 所以每次add之后,list发现对象引用和之前元素一样,就覆盖掉了之前add的对象.所以循环之后list中的对象是重复的对象. 想要避免这个问题只要每次add时保证对象引用都是不同的即可,即每循环一次重新new一个对象. 另外如果List集合在循环内ne

  • java实现把一个List集合拆分成多个的操作

    有些时候我们需要对一批数据进行分批处理, 使用subList方法可以实现对List集合进行固定长度的分割. /* * List分割 */ public static List<List<String>> groupList(List<String> list) { List<List<String>> listGroup = new ArrayList<List<String>>(); int listSize = lis

  • 如何去除Java中List集合中的重复数据

    1.循环list中的所有元素然后删除重复 public class duplicatRemoval { public static List removeDuplicate(List list){ for(int i=0;i<list. size()-1;i++){ for(int j=list.size()-1;j>i;j--){ if(list. get(j). equals(list.get(i))){ list.remove(j); } } } return list; } } 总结:

  • java List去掉重复元素的几种方式(小结)

    使用LinkedHashSet删除arraylist中的重复数据(有序) LinkedHashSet是在一个ArrayList删除重复数据的最佳方法.LinkedHashSet在内部完成两件事: 删除重复数据 保持添加到其中的数据的顺序 List<String> words= Arrays.asList("a","b","b","c","c","d"); HashSet<

  • Java实现数组去除重复数据的方法详解

    本文实例讲述了Java实现数组去除重复数据的方法.分享给大家供大家参考,具体如下: 前一段时间被面试问到:如果一个数组中有重复元素,用什么方法可以去重?一时间会想到用一种方法,但是后来查阅资料后发现,有好多方法可以实现,现在就总结一下,比较简单的几种. 一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer>(); for (int i=0; i<s

  • java 实现多个list 合并成一个去掉重复的案例

    我就废话不多说了,大家还是直接看代码吧~ public static void main(String[] args){ List<Integer> list1 = new ArrayList<Integer>(); list1.add(1); list1.add(2); list1.add(3); list1.add(4); List<Integer> list2 = new ArrayList<Integer>(); list2.add(1); list

  • js+canvas实现两张图片合并成一张图片的方法

    本文实例讲述了js+canvas实现两张图片合并成一张图片的方法.分享给大家供大家参考,具体如下: JS和canvas的合成方式 function drawAndShareImage(){ var canvas = document.createElement("canvas"); canvas.width = 700; canvas.height = 700; var context = canvas.getContext("2d"); context.rect(

  • jdk8使用stream实现两个list集合合并成一个(对象属性的合并)

    目录 一.前言 二.示例 示例1:java8 合并两个 list<map> 示例2:java8 合并两个 list<T> 示例3:java8 合并两个 list<T>,集合个数前者小于后者,要后者 示例4:java8 合并两个 list<T>,集合个数前者大于后者,要后者 java使用stream实现list中对象属性的合并:根据两个List中的某个相同字段合并成一条List,包含两个List中的字段 一.前言 为什么要用Lambda表达式和Stream流做

  • java 实现切割文件和合并文件的功能

    java 实现切割文件和合并文件的功能 一.切割文件代码如下: 需求:将一个媒体文件切割成多个碎片(每个碎片的大小为1M),并添加配置说明文件 1.创建(指定)一个文件夹,用于保存切割出来的碎片           2.创建源文件对象,并传入一个输入流对象           3.创建一个缓冲区为1M           4.创建一个输入流对象并将源文件对象传入,创建一个输出流对象引用           5.每个缓冲区获取到碎片时,使用输出对应流对象写入到一个新的文件           6.

  • python实现两个一维列表合并成一个二维列表

    我就废话不多说了,直接上代码吧! >>> list1 = [1,2,3,4,4] >>> list2 = [2,3,4,5,2] >>> z = list(zip(list1,list2)) >>> z [(1, 2), (2, 3), (3, 4), (4, 5), (4, 2)] >>> z[1][1] 3 >>> z[0][1] 2 >>> z[2] (3, 4) 以上这篇p

  • Java实现文件分割与合并

    本文实例为大家分享了Java实现文件分割与合并的具体代码,供大家参考,具体内容如下 文件的操作 文件的分割 package com.xhh.util; import java.io.*; /** * 文件分割的方法 * @param SrcFilePath 指定分割的文件路径 * @param SingleGoalFileSize 分割文件的个数 * @param GoalFileDirectory 分割之后的路径 */ public class Split{ public static voi

  • Java中EasyPoi导出复杂合并单元格的方法

    前言: 上星期做了一个Excel的单元格合并,用的是EasyPoi,我之前合并单元格都是原生的,第一次使用EasyPoi合并也不太熟悉,看着网上自己套用,使用后发现比原生的方便些,贡献一下,也给其他用到合并而且用的是EasyPoi的小伙伴节省下时间. 导出模板: 坐标: 版本号,自己来定,可以去官网查看:EasyPoi官网 <!-- easypoi 导入包 --> <dependency> <groupId>cn.afterturn</groupId> &l

  • Java导出Excel统计报表合并单元格的方法详解

    目录 前言 示例 注意事项 总结 前言 Apache POI是一种流行的API,允许程序员使用Java程序创建,修改和显示MS Office文件. 它是由Apache Software Foundation开发和分发的开源库,用于使用Java程序设计或修改Microsoft Office文件. 它包含将用户输入数据或文件解码为MS Office文档的类和方法. HSSF - 用于读取和写入MS-Excel文件的xls格式 示例 类似上面的需要合并表头的报表在日常的开发中也是经常遇到,这里总结下关

  • js使用Canvas将多张图片合并成一张的实现代码

    解决方案 function mergeImgs(list) { const imgDom = document.createElement('img') document.body.appendChild(imgDom) const canvas = document.createElement('canvas') canvas.width = 500 canvas.height = 500 * list.length const context = canvas.getContext('2d'

  • SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串

    概述 STRING_AGG(合并):多行数据合并成一个字符串,以逗号隔开. STRING_SPLIT(拆分):一个字符串,拆分成多行. 一.多行数据合并成一个字符串 1.通过 FOR xml path('') 合并字符串记录 根据name字段,合并code declare @table1 table ( id int ,code varchar(10) , name varchar(20) ); insert into @table1 ( id,code, name ) values ( 1,

随机推荐