我有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}

最佳答案

您可以简单地使用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));

关于java - 按对象分组属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56200563/

10-11 17:18