2015-11-05 3 views
2

Если изображение, у нас есть объект, называемый человеком, и человек выглядит как follwing:Значение по умолчанию для возврата Collectors.toMap

class Person { 
    int id; 
    String name; 
    String country 
    // ... 
    // getter/setter 
} 

И у нас есть List из Person объектов, и мы хотим «преобразовать» его к карте. Мы можем использовать следующее:

Map<Long, List<Person>> collect = personList.stream(). 
    collect(Collectors.toMap(Person::getId, p -> p)); 

Но можно вернуть значения по умолчанию для valuemapper и изменить тип valuemapper?

Я думал, на что-то вроде этого:

Map<Long, List<Person>> collect = 
    personList.stream().collect(Collectors.groupingBy(Person::getId, 0)); 

, но с этим я получаю следующую ошибку is not applicable for the arguments

У меня есть обходной путь, но я думаю, что это на самом деле не очень.

Map<Long, Object> collect2 = personList.stream(). 
    collect(Collectors.toMap(Person::getId, pe -> { 
      return 0; 
    })); 
+1

Зачем использовать группировку? Не имеет ли каждый человек уникальный идентификатор? Что вы здесь группируете? – Eran

+0

Да, ты прав. Извините, мой тупой, потому что у меня в моем идее есть другой объект, но прежде чем появятся вопросы о том, что этот объект и что делает и т. Д., Я решил использовать «allrounder» для этого примера. я меняю его. –

+1

Мне сложно понять, чего вы хотите достичь. Что вы хотите, чтобы карта содержала: укажите пример с 3 или 4 людьми и итоговую карту. –

ответ

5

Если вы хотите отобразить каждый идентификатор каждого человека на ту же величину, что это именно то, что вам нужно сделать, хотя вы можете упростить его, написав Collectors.toMap(Person::getId, pe -> 0).

+0

спасибо! это именно то, что я хочу. –

Смежные вопросы