按对象分组属性

时间:2019-05-18 15:50:03

标签: java java-stream

我有Inventory的列表:

class Inventory {
    String refCode;
    int min;
    int max;
    // getters and setters
}
refCode     min   max
-------    ----  ---
DOUBLE      2   2   
DOUBLE      2   2   
TWIN        1   2   
SINGLE      3   4 

现在,我想使用min属性进行分组,以便我的输出像这样:

Map<String, int> output;

{DOUBLE=2, TWIN=1, SINGLE=3}

1 个答案:

答案 0 :(得分:3)

您可以简单地使用Collectors.toMap()来实现此目的:

Map<String, Integer> result = list.stream()
        .collect(Collectors.toMap(Inventory::getRefCode, Inventory::getMin, (a, b) -> a));

如果您有多个键,这将保留第一个值。如果要保留最后一个,只需使用(a, b) -> b而不是(a, b) -> a

如果您需要项目与列表中的顺序相同,只需使用LinkedHashMap

Map<String, Integer> result = list.stream()
        .collect(Collectors.toMap(Inventory::getRefCode, Inventory::getMin, (a, b) -> a, LinkedHashMap::new));