491 Stimmen

Abrufen einer Liste aus einem java.util.stream.Stream in Java 8

Ich habe mit Java 8 Lambdas herumgespielt, um Kollektionen einfach zu filtern. Aber ich habe keinen prägnanten Weg gefunden, um das Ergebnis in Form einer neuen Liste im selben Statement abzurufen. Hier ist mein bisher prägnantester Ansatz:

List sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L);
List targetLongList = new ArrayList<>();
sourceLongList.stream().filter(l -> l > 100).forEach(targetLongList::add);

Beispiele im Netz haben meine Frage nicht beantwortet, weil sie ohne Erzeugung einer neuen Ergebnisliste enden. Es muss einen prägnanteren Weg geben. Ich hätte erwartet, dass die Stream-Klasse Methoden wie toList(), toSet(), ... hat.

Gibt es einen Weg, wie die Variable targetLongList direkt in der dritten Zeile zugewiesen werden kann?

0voto

Kashyap Punkte 13596

Falls jemand da draußen nach Möglichkeiten sucht, mit Objekten anstelle von primitiven Typen umzugehen, dann benutze mapToObj()

String ss = "Eine alternative Möglichkeit besteht darin, die folgende VM-Option vor "
        + "der -vmargs-Option in den Eigenschaften der Eclipse-Verknüpfung einzufügen "
        + "(Bearbeiten Sie das Feld Ziel im Tab Verknüpfung):";

List ll = ss
                        .chars()
                        .mapToObj(c -> new Character((char) c))
                        .collect(Collectors.toList());

System.out.println("Listentyp: " + ll.getClass());
System.out.println("Elementtyp: " + ll.get(0).getClass());
ll.stream().limit(50).forEach(System.out::print);

gibt aus:

Listentyp: class java.util.ArrayList
Elementtyp: class java.lang.Character
Eine alternative Möglichkeit besteht darin, die folgende VM o

0voto

user_3380739 Punkte 1495

Hier ist der Code von abacus-common

LongStream.of(1, 10, 50, 80, 100, 120, 133, 333).filter(e -> e > 100).toList();

Offenlegung: Ich bin der Entwickler von abacus-common.

0voto

sharath Punkte 195
String joined = 
    Stream.of(isRead?"read":"", isFlagged?"flagged":"", isActionRequired?"action":"", isHide?"hide":"")
          .filter(s -> s != null && !s.isEmpty())
          .collect(Collectors.joining(","));

0voto

Pratik Pawar Punkte 81

Sie können den Code wie folgt neu schreiben:

List sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L);
List targetLongList = sourceLongList.stream().filter(l -> l > 100).collect(Collectors.toList());

-3voto

Debapriya Biswas Punkte 1079

Wenn Sie parallel() nicht verwenden, wird dies funktionieren

List sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L);

List targetLongList =  new ArrayList();

sourceLongList.stream().peek(i->targetLongList.add(i)).collect(Collectors.toList());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X