Я пытаюсь преобразовать список объектов в другой список объектов. Но я пытаюсь выбрать лучший способ использования с потоками или без них способом 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.
Любые предложения приветствуются и полезны.
@HadiJ В настоящее время я использую Map. но я хочу использовать объект, учитывая, что в будущем могут быть усовершенствования, которые могут упростить его использование в качестве объекта. Спасибо за ответ, хотя :)




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