W normalnym języku zrobił bym to tak:
case class Test(name: String, value: Int)
val kolejnosc = List(4,6,1,3,2)
val listaDoPosortowania = List(new Test("name1", 2 ), new Test("name2", 3), new Test("name3", 4))
val zipped = kolejnosc.zip(listaDoPosortowania)
val sorted = zipped.sortBy(_._1)
val result = sorted.map(_._2)
println(result)
A w jednej linii:
kolejnosc.zip(listaDoPosortowania).sortBy(_._1).map(_._2)
XD
pytanie jak to teraz zapisac w Javie
import java.util.*;
import java.util.stream.*;
public class WriteOnlyPl {
public record Test(String name, int value) {
}
//Normalny język ma krotki, ale to java. Mam jakiś problem z generykami to typy wbiłem na sztywno
public record Tuple2(Integer t1, Test t2) {
}
public static void main(String args[]) {
var kolejnosc = List.of(4,6,1,3,2);
var listaDoPosortowania = List.of(new Test("name1", 2 ), new Test("name2", 3), new Test("name3", 4));
// kszywy zip. W kodzie produkcyjnym albo użyłbym do tego biblioteki, albo napisał swój iterator
var zipped = IntStream
.range(0, Math.min(kolejnosc.size(), listaDoPosortowania.size()))
.mapToObj(i -> new Tuple2(kolejnosc.get(i), listaDoPosortowania.get(i))).toList();
//generyki się sypały na `Comparator.comparing(it -> it.t1)`. Pewnie trzeba tu dodac rzutawanie gdzieś
var sorted = zipped.stream().sorted(Comparator.comparing(it -> it.t1)).toList();
var result = sorted.stream().map(it -> it.t2).toList();
System.out.println(result);
}
}
kurde co za straszny język
BTW wiem że robie za dużo konwersji Stream <-> Lista, ale chciałem tylko pozkazać zamysł