Преобразовать список <SomeObject>в список <AnotherObject>в Java 8 - PullRequest
3 голосов
/ 08 июля 2019

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

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

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

SomeObject:

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

AnotherObject:

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.

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

1 Ответ

2 голосов
/ 08 июля 2019

Вы, похоже, ищете 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());
...