ниже приведены шаги, которые необходимо предпринять;аналогично тому, что @Joakim Danielson упомянул в комментариях:
сгруппируйте список источников, как вы упомянули в своем посте, а затем добавьте конструктор в ClassB
, который принимает список ClassA
, а затем выполняетлогика, которую вы упомянули в терминах установки заголовка и объединения описаний:
, так что это будет ваш потоковый конвейер:
List<ClassB> result = source.stream()
.collect(groupingBy(s -> s.getGroup() + "" + s.getId())) // Map<String, List<ClassA>>
.values() // Collection<List<ClassA>>
.stream() // Stream<List<ClassA>>
.map(ClassB::new) // Stream<ClassB>
.collect(Collectors.toList()); //List<ClassB>>
, и вам понадобится конструктор в ClassB, определенный как:
public ClassB(List<ClassA> source) {
ClassA item = source.get(0);
if(“1”.equals(item.getKeyword())
this.newtitle = item.getTitle();
else if(“2”.equals(item.getKeyword())
this.newtitle = “specialValue”; // or make a call to a method to compute the value
this.joinedDescriptions = String.join(“, “, source.stream().map(ClassA::getDescription).collect(toList()));
}