Всем привет. Как сделать динамическую подстановку метода?
Object method = Ticket::getFrom;
if (prop == Properties.FROM) {
// method = Ticket::getFrom;
} else if (prop == Properties.TO) {
// method = Ticket::getTo;
}
// Как правильно динамически подставлять выражение?
// return tickets.stream()
// .collect(Collectors.groupingBy(method,
// Collectors.mapping(Function.identity(), Collectors.toList())));
package main.java;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
enum Properties {
FROM, TO,
}
public class Solution {
public Map<String, List<Ticket>> fromEntries(List<Ticket> tickets, Properties prop) {
/*
return tickets.stream()
.collect(Collectors.groupingBy(Ticket::getFrom, Collectors.mapping(Function.identity(), Collectors.toList())));
*/
// Object method = Ticket::getFrom;
if (prop == Properties.FROM) {
// method = Ticket::getFrom;
} else if (prop == Properties.TO) {
// method = Ticket::getTo;
}
// return tickets.stream()
// .collect(Collectors.groupingBy(method,
// Collectors.mapping(Function.identity(), Collectors.toList())));
}
public List<Ticket> sortingTickets(List<Ticket> tickets) {
Map<String, List<Ticket>> mapFrom = fromEntries(tickets, Properties.FROM);
System.out.println(fromEntries(tickets, Properties.FROM));
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));
}
}