
Java中能取出List里的相同数据;比如{ { 1,2,3,4,5,6},{11,22,33,44,55,6},{12,13,14,15,16,6} };
3个回答
展开全部
寻找相同的数据, 可以使用多种方式,下面简单介绍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);
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询