Java-8-partition Liste

Ist es möglich, die partition eine Liste, in der reinen Jdk8 in gleich große Stücke (Teillisten).

Ich weiß, dass es möglich ist, mit Guave Listen Klasse, aber können wir tun es mit pure Jdk? Ich will nicht, um neue Gläser zu meinem Projekt, nur für einen Anwendungsfall.

SOLUTONS:

Die beste Lösung bis jetzt präsentiert wurde tagir-valeev:

Habe ich auch gefunden drei andere Möglichkeiten, aber Sie sind ment für nur wenige Fälle:

1.Sammler.partitioningBy() teilen Sie die Liste in 2 Teillisten – wie folgt:

intList.stream().collect(Collectors.partitioningBy(s -> s > 6));
    List<List<Integer>> subSets = new ArrayList<List<Integer>>(groups.values());

2.Sammler.groupingBy() zum zerlegen der Liste in mehrere Partitionen:

 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-separator:

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 einen Blick in die Guave sourcecode und tun es entsprechend...?
Wringen Sie eine Funktion in plain-java ist kein problem, aber JDK8 haben einige tolle features mit streaming und Operationen auf Kollektionen, und ich nehme an, es würde schneller sein als das schreiben von eigenem code. Aber das ist nur meine Vermutung.
Ich markiert es als möglich, Duplikat als Java-8-Lösung ist ebenfalls erhältlich.
Ja, ich habe gesehen, dass die Frage, aber ich vermisste Jdk8 Lösung, danke:)
Auch diskutiert, hier

InformationsquelleAutor Beri | 2015-06-23

Schreibe einen Kommentar