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

如何用Java 11的Stream distinct函数验证任务列表中是否存在重复用户

Java 11 检查任务列表中是否存在重复用户

步骤1:定义数据实体类

用Java 11的record(轻量数据载体)匹配JSON结构:

public record User(String username) {}

public record Task(int id, List<User> users) {}

public record TaskList(List<Task> tasks) {}

步骤2:实现重复检查逻辑

利用Stream API扁平化所有用户列表,通过Set的去重特性判断是否存在重复:

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class DuplicateUserChecker {
    public static boolean hasDuplicateUsers(TaskList taskList) {
        // 提取所有非空用户名并去重
        Set<String> uniqueUsernames = taskList.tasks().stream()
                .flatMap(task -> task.users().stream())
                .map(User::username)
                .filter(username -> username != null) // 过滤空用户名
                .collect(Collectors.toSet());

        // 统计所有非空用户名的总数
        long totalValidUsernames = taskList.tasks().stream()
                .flatMap(task -> task.users().stream())
                .map(User::username)
                .filter(username -> username != null)
                .count();

        // 总数与去重后数量不一致则存在重复
        return totalValidUsernames != uniqueUsernames.size();
    }

    public static void main(String[] args) {
        // 模拟示例数据测试
        User user1 = new User("username1");
        User user2 = new User("username1");
        User user3 = new User("username2");
        
        Task task1 = new Task(1, List.of(user1));
        Task task2 = new Task(2, List.of(user2, user3));
        
        TaskList taskList = new TaskList(List.of(task1, task2));
        
        System.out.println(hasDuplicateUsers(taskList)); // 输出 true
    }
}

可选:解析JSON数据

若需从JSON文件/字符串加载数据,可使用Jackson库(需引入依赖):

Maven依赖

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

解析代码

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class TaskListParser {
    public static void main(String[] args) throws IOException {
        // 读取JSON文件内容
        String jsonContent = Files.readString(Paths.get("tasks.json"));
        
        // 解析为TaskList对象
        ObjectMapper mapper = new ObjectMapper();
        TaskList taskList = mapper.readValue(jsonContent, TaskList.class);
        
        // 检查重复用户
        boolean hasDuplicates = DuplicateUserChecker.hasDuplicateUsers(taskList);
        System.out.println("是否存在重复用户:" + hasDuplicates);
    }
}

额外说明

  • 大小写敏感处理:若需忽略用户名大小写(如Username1和username1视为重复),可在提取用户名时统一转换:
    .map(user -> user.username().toLowerCase())
    
  • 空值处理:示例过滤了null用户名,若需将多个null视为重复,移除filter操作即可。

内容的提问来源于stack exchange,提问作者Luiz Ricardo Cardoso

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:10:26