You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java Stream从列表中筛选唯一元素及去重后的重复元素

解法思路

你当前用的distinct()只能拿到所有去重后的元素,无法区分元素是否出现过重复,所以需要先统计每个元素的出现频次,再按频次筛选即可:

  1. 统计ArrayList中每个元素的出现次数
  2. 遍历频次统计结果,出现次数为1的元素存入B,出现次数≥2的元素存入C

完整代码实现

Stream流写法(Java 8及以上适用)

import java.util.*;
import java.util.stream.Collectors;

public class SplitList {
    public static void main(String[] args) {
        ArrayList<Integer> A = new ArrayList<>(Arrays.asList(1,2,5,2,4,2,1,3,6,1,4));
        // 统计每个元素的出现次数
        Map<Integer, Long> countMap = A.stream()
                .collect(Collectors.groupingBy(num -> num, Collectors.counting()));
        
        // 筛选仅出现一次的元素到B
        List<Integer> B = countMap.entrySet().stream()
                .filter(entry -> entry.getValue() == 1)
                .map(Map.Entry::getKey)
                .collect(Collectors.toList());

        // 筛选出现过重复的元素去重后到C
        List<Integer> C = countMap.entrySet().stream()
                .filter(entry -> entry.getValue() >= 2)
                .map(Map.Entry::getKey)
                .collect(Collectors.toList());

        // 验证输出
        System.out.println(B); // [5, 3, 6]
        System.out.println(C); // [1, 2, 4]
    }
}

普通遍历写法(兼容低版本Java)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SplitList {
    public static void main(String[] args) {
        ArrayList<Integer> A = new ArrayList<>(Arrays.asList(1,2,5,2,4,2,1,3,6,1,4));
        Map<Integer, Integer> countMap = new HashMap<>();
        // 遍历统计频次
        for (Integer num : A) {
            countMap.put(num, countMap.getOrDefault(num, 0) + 1);
        }
        List<Integer> B = new ArrayList<>();
        List<Integer> C = new ArrayList<>();
        // 按频次分组
        for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
            if (entry.getValue() == 1) {
                B.add(entry.getKey());
            } else {
                C.add(entry.getKey());
            }
        }
        // 验证输出
        System.out.println(B); // [5, 3, 6]
        System.out.println(C); // [1, 2, 4]
    }
}

内容的提问来源于stack exchange,提问作者user16303509

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 00:06:05