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

如何使用forEach根据对象字段值筛选并分组至新数组/列表?

有条件遍历对象数组/集合并分组到新列表的实现方案

嘿,我来帮你搞定这两个Java场景下的遍历分组问题,直接上实用的代码和解释:


1. 有条件遍历对象数组,筛选元素到新数组

假设我们有一个User对象数组,要把符合特定字段值的元素挑出来放到新数组里。这里分两种实现方式:

传统for-each遍历(兼容所有Java版本)

先定义基础的User类:

class User {
    private String userName;
    
    public User(String userName) {
        this.userName = userName;
    }
    
    public String getUserName() {
        return userName;
    }
    
    @Override
    public String toString() {
        return "User{userName='" + userName + "'}";
    }
}

然后遍历数组筛选:

// 初始化对象数组
User[] userArray = {
    new User("Freddy"),
    new User("John"),
    new User("Freddy"),
    new User("Alice")
};

// 用集合临时存储筛选结果(数组长度固定,集合更灵活)
List<User> filteredList = new ArrayList<>();

// 遍历数组,判断条件后添加
for (User user : userArray) {
    // 注意用常量.equals()避免空指针
    if ("Freddy".equals(user.getUserName())) {
        filteredList.add(user);
    }
}

// 把集合转成目标数组
User[] targetArray = filteredList.toArray(new User[0]);

Java 8+ Stream简化写法

如果你的项目用Java 8及以上,用Stream会更简洁:

import java.util.Arrays;

User[] targetArray = Arrays.stream(userArray)
                          .filter(user -> "Freddy".equals(user.getUserName()))
                          .toArray(User[]::new);

2. 用forEach遍历ArrayList,拆分到多个目标列表

针对你说的把userList拆分成freddyList、johnList等的需求,用forEach可以直接在遍历逻辑里做分组判断:

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

public class UserGrouping {
    public static void main(String[] args) {
        // 初始化源列表
        List<User> userList = Arrays.asList(
            new User("Freddy"),
            new User("John"),
            new User("Freddy"),
            new User("Alice"),
            new User("John"),
            new User("Bob")
        );

        // 准备三个目标列表
        List<User> freddyList = new ArrayList<>();
        List<User> johnList = new ArrayList<>();
        List<User> othersList = new ArrayList<>();

        // 用forEach遍历并分组
        userList.forEach(user -> {
            String userName = user.getUserName();
            switch (userName) {
                case "Freddy":
                    freddyList.add(user);
                    break;
                case "John":
                    johnList.add(user);
                    break;
                default:
                    othersList.add(user);
                    break;
            }
        });

        // 打印验证结果
        System.out.println("Freddy专属列表:" + freddyList);
        System.out.println("John专属列表:" + johnList);
        System.out.println("其他用户列表:" + othersList);
    }
}

补充说明

  • forEach是Java 8给Collection接口加的默认方法,会迭代集合里的每个元素,你可以在lambda表达式里写自定义的处理逻辑。
  • 如果后续需要扩展更多分组条件,直接在switch里加case就行,逻辑很直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:21:24