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

Java中如何通过传入分类器函数实现多规则数据分组?

可行!通用分组方法实现方案

当然可行,你只需要将通用分组方法的分类器参数明确为Function<? super Data, ? extends KeyGroup>类型,再通过Lambda表达式定义不同规则的分类器,就能适配多种分组场景。

1. 修正通用分组方法

原期望的通用方法存在语法错误(多余闭合括号)且参数未声明类型,修正后的代码如下:

import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public Map<KeyGroup, List<Data>> groupData(List<Data> data, Function<? super Data, ? extends KeyGroup> classifier) {
    return data
            .stream()
            .collect(Collectors.groupingBy(classifier));
}

2. 声明不同规则的分类器

直接用Lambda表达式实现两个分类器,完全对应原有的两种分组逻辑:

// 对应groupData1的规则:按code、startDate、endDate组合分组
Function<? super Data, ? extends KeyGroup> classifier1 = d -> new KeyGroup(d.getCode(), d.getStartDate(), d.getEndDate());

// 对应groupData2的规则:仅按code分组
Function<? super Data, ? extends KeyGroup> classifier2 = d -> new KeyGroup(d.getCode());

3. 调用示例

// 假设已有data1、data2两个List<Data>实例
Map<KeyGroup, List<Data>> groupedData1 = groupData(data1, classifier1);
Map<KeyGroup, List<Data>> groupedData2 = groupData(data2, classifier2);

额外优化建议(可选)

为避免后续修改KeyGroup的keys导致分组逻辑混乱,建议将KeyGroup的keys改为不可变集合,并移除setKeys方法,增强分组的稳定性:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

public class KeyGroup {
    private final List<Object> keys;

    public KeyGroup(Object... keys) {
        this.keys = Collections.unmodifiableList(List.of(keys));
    }

    public KeyGroup(List<Object> keys) {
        this.keys = Collections.unmodifiableList(new ArrayList<>(keys));
    }

    public List<Object> getKeys() {
        return keys;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof KeyGroup)) return false;
        KeyGroup keyGroup = (KeyGroup) o;
        return keys.equals(keyGroup.keys);
    }

    @Override
    public int hashCode() {
        return Objects.hash(keys);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:03:17