Zum Beispiel habe ich eine lange Liste [1, 2, 3, ..., 10]
und eine kurze [1, 3, 6]
, dann kann ich sagen, dass die kurze die Unterfolge einer anderen ist. Auf der anderen Seite ist die Liste [1 6 3]
nicht, weil sie gegen die Reihenfolge Constraint.
Unten ist mein Java7-Stil-Code für diese Frage:
%Vor%Und mein Wunsch ist es, einen java8 stream Stil zu finden, um das gleiche Ergebnis zu erzielen.
Wirkliche funktionelle Lösungen, d. h. die keinen veränderlichen Zustand enthalten, sind schwer zu finden. Dies wird am besten durch die Tatsache illustriert, dass alle Antworten bisher einen veränderlichen Zustand enthalten.
Außerdem gibt es keine Operation List.indexOf(T object, int startIndex)
. Um zu veranschaulichen, wie nützlich es wäre, lass es über die Hilfsmethode definieren:
Es wäre leicht, eine alternative Implementierung ohne ein temporäres Objekt zu finden, wenn das ein Problem ist
Eine einfache Lösung mit veränderbarem Zustand wäre nun:
%Vor% Eine funktionale Lösung ohne veränderlichen Zustand erfordert einen Werttyp, der zwei Positionen innerhalb der zwei Listen enthält. Wenn wir ein Array int[2]
dafür verwenden, wäre die Lösung:
Ich bin der Fragesteller und beantworte meine Frage zuerst nur für die Marke:
%Vor%Es funktioniert gut für die Sequenzliste [1, 3, 6], während für die Sequenz [1, 6, 3] ein Fehler java.util.NoSuchElementException ausgelöst wird. Das ist nicht das, was ich endlich erreichen möchte.
Eine Variante der @ Eugene-Variante von @ Runs Antwort würde beinhalten, Iterable :: spliterator auf der globalen Liste aufzurufen & lt; & gt; Wert, dann wenden Sie das Ergebnis auf StreamSupport :: stream:
%Vor%Ich werde eine weitere Option hinzufügen, nachdem ich Holgers Antwort gesehen habe; aber das funktioniert nur mit jdk-9 Stream.iterate .
Ich habe eine Hilfsmethode auf die gleiche Weise definiert, ein kleines bisschen anders:
%Vor% Und dann benutze einfach ein int[2]
:
BEARBEITEN Holger hat recht, das wird nur für Nichtduplikate funktionieren.
Ich kann es auch für Duplikate schreiben, aber es leidet unter dem Punkt, dass fits
jetzt zweimal aufgerufen werden muss.
Tags und Links java java-8 functional-programming java-stream