Преобразование списка <SomeObject> в список <AnotherObject> в Java 8

Я пытаюсь преобразовать список объектов в другой список объектов. Но я пытаюсь выбрать лучший способ использования с потоками или без них способом java8 с большей читабельностью.

Допустим, у меня есть список, как показано ниже:

List<SomeObject> list = new ArrayList<SomeObject>;

НекоторыйОбъект:

public class SomeObject{
  private String var1;
  private String var2;
  private String var3;
  private String var4;
  //getters and setters
}

Другой объект:

public class AnotherObject{
  private String var1;
  private List<String> var2;
  //getters and setters
}

Но в другом объекте, если var1 одинаков для нескольких объектов, я хочу сохранить значение var2 в списке строк. Пример ниже:

SomeObject so = new SomeObject();
so.setVar1("key1");
so.setVar2("value1");
SomeObject so1 = new SomeObject();
so1.setVar1("key2");
so1.setVar2("value2"); 
SomeObject so2 = new SomeObject();
so2.setVar1("key2");
so2.setVar2("value3");    
list.add(so);
list.add(so1);
list.add(so2);

Теперь из приведенного выше списка я хочу создать список AnotherObject, который имеет только var1 и var2, и если var1 одинаков в двух SoemObject, тогда я хочу, чтобы значения var2 были в списке и сохранялись для var1.

Любые предложения приветствуются и полезны.

ИМО вам не нужно создавать новый объект! (ДругойОбъект). почему бы вам не использовать Map<String,List<String>> в этом случае у вас может быть простой способ. list.stream() .collect(Collectors.groupingBy(SomeObject::getVar1, Collectors.mapping(SomeObject::getVar2, Collectors.toList())));

Hadi J 08.07.2019 18:34

@HadiJ В настоящее время я использую Map. но я хочу использовать объект, учитывая, что в будущем могут быть усовершенствования, которые могут упростить его использование в качестве объекта. Спасибо за ответ, хотя :)

ging 08.07.2019 19:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
2
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, вы ищете groupingBy на основе var1, а затем mapping в var2 в виде списка значений. Это можно сделать как:

List<AnotherObject> anotherList = list.stream()
        .collect(Collectors.groupingBy(
                SomeObject::getVar1, Collectors.mapping(
                        SomeObject::getVar2, Collectors.toList())))
        .entrySet().stream()
        .map(e -> new AnotherObject(e.getKey(), e.getValue()))
        .collect(Collectors.toList());

Не бери в голову. Идеально это то, что я ищу. Спасибо !

ging 08.07.2019 19:15

Другие вопросы по теме