300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 找出两个List集合重复的元素

找出两个List集合重复的元素

时间:2022-10-31 09:39:40

相关推荐

找出两个List集合重复的元素

前几天,有个同事问我说怎么找出两个List集合中重复的元素,我当时就说一个集合在外面循环,一个集合在内循环,如果两个元素相等了,就找出来了,我回来一想还是不对,要是数据非常多,这样循环下去,服务器会卡死的,最后我想了想,用以下两种方法:

List<String> list1 = new ArrayList<>();List<String> list2 = new ArrayList<>();list1.add("a");list1.add("b");list1.add("c");list1.add("d");list2.add("d");list2.add("f");list2.add("g");list2.add("h");list2.add("k");

第一种方法:这是把list1集合放到list2中

list2.addAll(list1);HashMap<String,Integer> mapList=new HashMap<>();for(String str:list2){int count=0;if(mapList.get(str)!=null){count=mapList.get(str)+1;}mapList.put(str,count);}System.out.println("重复的元素是:");for(String key:mapList.keySet()){if(mapList.get(key)!=null && mapList.get(key)>0){System.out.println(key);}}

第二种方法:

Map<String,String> map=new HashMap<>();String str=null;String stp=null;String psp=null;for(int i=0;i<list1.size();i++){str=list1.get(i);map.put(str,str);}for(String spt:map.keySet()){System.out.println("key:"+spt+"-----------value:"+map.get(spt));}System.out.println("==========="+map.entrySet());for(int i=0;i<list2.size();i++){stp=list2.get(i);if(stp.equals(map.get(str))){System.out.println("重复的元素:"+stp);}}

以上就是我用的两种方法,由于是个菜鸟,所以大神们有更好的方法望指点,在下感激不尽!

补充:

下面是java8新特性去list集合重复的方法,非常简单,比前的方法简单多了,

首先是将两个集合合并在一起,然后就是下面的方法:(list2是合并以后的集合,spa是去重复的新集合)

List<String> spa = list2.stream().distinct().collect(Collectors.toList());

这种方法最简单,代码少,清晰明了!!!!

补充:

java8的方法中可以找出相同的元素 代码如下:

public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("a");list.add("b");list.add("c");list.add("d");list.add("a");list.add("b");System.out.println(getDuplicateElements(list.stream()));}public static <T> List<T> getDuplicateElements(Stream<T> stream) {return stream.collect(Collectors.groupingBy(p -> p,Collectors.counting())).entrySet().stream() // Set<Entry>转换为Stream<Entry>.filter(entry -> entry.getValue() > 1) // 过滤出元素出现次数大于 1 的 entry.map(entry -> entry.getKey()) // 获得 entry 的键(重复元素)对应的 Stream.collect(Collectors.toList()); // 转化为 List}

执行结果如下:

[a, b]

由于在方法中使用了泛型,所以可以接收任意类型的流,注意在如果是对象,别忘了重写其 hashCode() 和 equals() 方法。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。