Свойство группировки по объекту - PullRequest
0 голосов
/ 18 мая 2019

У меня есть список 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 Ответ

3 голосов
/ 18 мая 2019

Вы можете просто использовать 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...