Как я могу использовать потоки java для группировки по атрибуту атрибута объекта?…на два уровня глубиной?

#java

#Ява

Вопрос:

Итак, рассмотрим, например, эти два объекта:

 class MyObject {  Integer Id;  MyObjectInner myObjectInner; }  class MyObjectInner {  Integer Id:  String attributeToGroupBy; }  

Если бы я хотел сгруппировать список MyObjects по идентификатору, я бы сделал что-то вроде:

 Maplt;Integer, Listlt;MyObjectgt;gt; myObjectsPerId =   myObjects.stream().collect(Collectors.groupingBy(MyObject::getId));  

Но что, если бы мне нужно было сгруппироваться по MyObject::MyObjectInner::AttributeToGroupBy, как бы я это сделал?

Комментарии:

1. Collectors.groupingBy(o -gt; o.myObjectInner.attributeToGroupBy)

2. Спасибо, что ответили Йоханнесу! Это сработало!

Ответ №1:

Чтобы это сработало, вам нужно будет добавить метод getId() в свой класс MyObject.

 class MyObject {  Integer Id;  MyObjectInner myObjectInner;   public MyObject(){}   public Integer getId() { return this.Id; } }  

Затем вы могли бы создать свою карту с помощью :

 Maplt;Object, Listlt;MyObjectgt;gt; myObjectsPerId =   myObjects.stream().collect(Collectors.groupingBy(o -gt; o.getId()));