java代码如何找出两个List集合中的重复元素呢?
下文笔者讲述找出两个list集合中重复元素的方法分享,如下所示
两个List集合中重复元素获取的实现思路
方式1: 遍历两个List,借助第三方List,找出重复元素 方式2: 借助List中Stream,然后进行对比获取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"); //方式1:将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); } } //方式2 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); } } //stream方法 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 }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。