Не могу решить задачу со стримами

Создать свой собственный класс, который НЕ реализует интерфейс 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
→ Ссылка