Не могу решить задачу со стримами
Создать свой собственный класс, который НЕ реализует интерфейс Comparable/Comparator и содержит внутри себя поля List и String, собрать коллекцию из экземпляров этого класса, при помощи стримов отсортировать эту коллекцию по строковому полю класса в обратном порядке, получить из класса List, смапить каждый элемент этого листа в строку вида «Element: elementPlaceholder” и собрать это все в Set
Моя попытка:
public class Test1
List<Data>datalist1;
String a;
List<Data>datalist1 = list.of(new Data(4), new Data(3), new Data(7));
datalist1.stream().peek(System.out::println).collect(Collectors.toMap(Data::getValue, d -> d).toList
А дальше вообще не понимаю, что делать.
Ответы (1 шт):
Автор решения: Chaos_Sower
→ Ссылка
Вам нужно что-то по типу этого, я полагаю:
import java.util.*;
import java.util.stream.Collectors;
class MyClass
{
List<Integer> dataList;
String str;
public MyClass(List<Integer> dataList, String str)
{
this.dataList = dataList;
this.str = str;
}
public List<Integer> getDataList()
{
return dataList;
}
public String getStr()
{
return str;
}
@Override
public String toString()
{
return "MyClass{" +
"dataList=" + dataList +
", str='" + str + '\'' +
'}';
}
}
public class Main
{
public static void main(String[] args)
{
List<MyClass> myClassList = Arrays.asList
(
new MyClass(Arrays.asList(4, 3, 7), "B"),
new MyClass(Arrays.asList(1, 2, 3), "A"),
new MyClass(Arrays.asList(9, 8, 7), "C")
);
Set<String> resultSet = myClassList.stream()
.sorted(Comparator.comparing(MyClass::getStr).reversed())
.flatMap(myClass -> myClass.getDataList().stream())
.map(element -> "Element: " + element)
.collect(Collectors.toCollection(LinkedHashSet::new));
resultSet.forEach(System.out::println);
}
}
Тогда данные на выводе будут следующими:
Element: 9
Element: 8
Element: 7
Element: 4
Element: 3
Element: 1
Element: 2