Как типизировать List, который содержит в себе набор списков, каждый из которых состоит из String и Object?

Всем привет. Как типизировать List (переменная listFrom), который содержит в себе набор списков, каждый из которых состоит из String и Object?

package main.java;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Solution {

    public List<Ticket> sortingTickets(List<Ticket> tickets) {

        List listFrom = tickets.stream().map(currentValue -> { // Как типизировать listFrom?

            List item = new ArrayList();
            item.add(currentValue.getFrom());
            item.add(currentValue);

            return item;

        }).collect(Collectors.toList());
        System.out.println("listFrom " + listFrom);
         /*
            [
                [ 'С.Петербург', { from: 'С.Петербург', to: 'Минск' } ],
                [ 'Киев', { from: 'Киев', to: 'Новосибирск' } ],
                [ 'Череповец', { from: 'Череповец', to: 'Москва' } ],
                [ 'Минск', { from: 'Минск', to: 'Киев' } ],
                [ 'Москва', { from: 'Москва', to: 'С.Петербург' } ]
            ]
         */

        return tickets;
    }
}

class Ticket {

    private String from;

    private String to;

    public Ticket(String from, String to) {
        this.from = from;
        this.to = to;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    @Override
    public String toString() {
        return "Ticket{" +
                "from='" + from + '\'' +
                ", to='" + to + '\'' +
                '}';
    }
}

class Main {

    public static void main(String[] args) {

        List<Ticket> tickets = new ArrayList<>();

        Ticket ticket1 = new Ticket("С.Петербург", "Минск");
        Ticket ticket2 = new Ticket("Киев", "Новосибирск");
        Ticket ticket3 = new Ticket("Череповец", "Москва");
        Ticket ticket4 = new Ticket("Минск", "Киев");
        Ticket ticket5 = new Ticket("Москва", "С.Петербург");

        tickets.add(ticket1);
        tickets.add(ticket2);
        tickets.add(ticket3);
        tickets.add(ticket4);
        tickets.add(ticket5);

        System.out.println(new Solution().sortingTickets(tickets));
    }
}



Ответы (1 шт):

Автор решения: Дмитрий

В данном случае коллекция типа лист не подходит в принципе. Коллекции в джаве типизируются при создании их экземпляров. Изменить это, чтобы каждый экземпляр коллекции имел свою типизацию, нельзя. Зато можно использовать болле подходящую для этого случая структуру данных. Я бы сделал так:

import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Solution {

    public Map<String, List<Ticket>> sortingTickets(List<Ticket> tickets) {
        return tickets.stream()
                .collect(Collectors.groupingBy(Ticket::getFrom,
                        Collectors.mapping(Function.identity(), Collectors.toList())));
    }
}
→ Ссылка