Ist es möglich, eine Liste in reinem Jdk8 in gleiche Teile (Unterlisten) zu partitionieren.Java 8 Partitionsliste
Ich weiß, es ist möglich mit Guava Lists Klasse, aber können wir es mit reinem Jdk tun? Ich möchte meinem Projekt keine neuen Jars hinzufügen, nur für einen Anwendungsfall.
SOLUTONS:
Die beste Lösung bis jetzt von tagir-valeev vorgestellt wurde:
Ich habe auch three other possibilities, aber sie sind nur wenige Fälle ment:
1.Collectors.partitioningBy() um die Liste in 2 Unterlisten zu teilen - wie folgt:
2.Collectors.groupingBy() unserer Liste auf mehrere Partitionen aufgeteilt:
Map<Integer, List<Integer>> groups =
intList.stream().collect(Collectors.groupingBy(s -> (s - 1)/3));
List<List<Integer>> subSets = new ArrayList<List<Integer>>(groups.values());
3.Split durch Trennzeichen:
List<Integer> intList = Lists.newArrayList(1, 2, 3, 0, 4, 5, 6, 0, 7, 8);
int[] indexes =
Stream.of(IntStream.of(-1), IntStream.range(0, intList.size())
.filter(i -> intList.get(i) == 0), IntStream.of(intList.size()))
.flatMapToInt(s -> s).toArray();
List<List<Integer>> subSets =
IntStream.range(0, indexes.length - 1)
.mapToObj(i -> intList.subList(indexes[i] + 1, indexes[i + 1]))
.collect(Collectors.toList());
Sie können sich Guava Quellcode anschauen und es entsprechend machen ...? –
Wring eine Funktion in Plain-Java ist kein Problem, aber JDK8 haben einige tolle Funktionen mit Streaming-und Operationen auf Sammlungen, und ich nehme an, es wäre schneller als das Schreiben von eigenem Code. Aber das ist nur meine Annahme. – Beri
Ich markierte es als mögliches Duplikat, da Java-8-Lösung auch dort verfügbar ist. –