Java中能取出List里的相同数据;比如 1,2,3,4,5,6,11,22,33,44,55,6,12,13,14,15,16,6 ;

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中能取出List里的相同数据;比如 1,2,3,4,5,6,11,22,33,44,55,6,12,13,14,15,16,6 ;相关的知识,希望对你有一定的参考价值。

寻找相同的数据, 可以使用多种方式,下面简单介绍2种

    第一种: 循环遍历,然后在把每一个元素,在其他集合里查找, 如果都存在该元素,就把这个元素保存起来

    第二种: java8流处理, 原理差不多, 但是语法比较简洁

稍微注意的是list1 = 'A','A','B'和list2 = 'A','C' 如果粗糙的求交集,会得到一个交集结果'A','A', 但是如果要严格取交集那么结果是一个'A'

解决起来很简单, 创造一个boolean[] b2=new boolean[list2.size]; 该boolean数组用于标记,list2的元素,哪些被使用了,哪些没有被使用.被使用的立刻标记为true .下次不再使用.

简单的参考代码: 可以按照自己的需求进行扩展和完善

import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;


public class Demo1 
//为了方便, 全部定义成静态属性,方便静态方法内使用
static ArrayList<Integer> list1 = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5, 6));
static ArrayList<Integer> list2 = new ArrayList<Integer>(Arrays.asList(11, 22, 33, 44, 55, 6));
static ArrayList<Integer> list3 = new ArrayList<Integer>(Arrays.asList(12, 13, 14, 15, 16, 6));

public static void main(String[] args) 
test1();//java8 流处理
test2();//传统遍历循环进行处理


//流处理求交集
private static void test1() 
System.out.println("list1,list2,list3的交集是:");
list1.stream().filter(num -> list2.contains(num) && list3.contains(num)).collect(Collectors.toList()).stream()
.forEach(System.out::println);


//循环遍历求交集
private static void test2() 
ArrayList<Integer> result = new ArrayList<Integer>();
for (Integer num : list1) 
if (list2.contains(num) && list3.contains(num)) 
result.add(num);


System.out.println("list1,list2,list3的交集是:");
for (Integer i : result) 
System.out.println(i);


参考技术A 迭代器和增强for循环 参考技术B jdk1.8 stream,然后取交集

以上是关于Java中能取出List里的相同数据;比如 1,2,3,4,5,6,11,22,33,44,55,6,12,13,14,15,16,6 ;的主要内容,如果未能解决你的问题,请参考以下文章

java中的list map set中能存放不同数据类型的元素吗

java中怎么取两个数组中不相同的数据?

java 如何把一个list里的相同数的出现次数输出成另一个list

java 怎么把list里面的数据取出来依次比较

java取List中重复的数据!

JAVA中的List里的Map 如何去除重复的Key?