Liste mit java8StreamAPI :: reduzieren bearbeiten

Der in der Geschäftslogik übliche Prozess der Aufteilung des Prozesses nach dem Listenindex kann auch mithilfe von Reduzieren implementiert werden. Zum Beispiel "Hinzufügen: zu anderen als dem Anfang der Liste" Logik wie diese kann mit Reduce wie folgt implementiert werden

MyBusinessLogic.java


package test;

import java.util.ArrayList;
import java.util.List;
import java.util.function.BiFunction;
import java.util.stream.Stream;

public class MyBunessLogic {
	public static void main(String args[]){
		final BiFunction<List<String>, String, List<String>> operation = 
	            (accum, value) -> {
	            	if(accum.size()!=0)accum.add(" : "+value);
	            	else accum.add(value);
	                return accum;
	    };
	    Stream.of("start","middle","end")
	    .reduce(new ArrayList<String>(),operation,(s,v)->s)
	    .forEach(System.out::print);
	}
}
Ausgabeergebnis
start : middle : end

Nachtrag Die Bedeutung des BiFunction-Typs ist schwer zu verstehen. Notieren Sie sich daher seine Verwendung. Der erste und der zweite Typ von Generika sind die Typen von Funktionsargumenten, der erste ist der Akkumulator und der zweite ist der zu berechnende Wert. Der dritte generische Typ zeigt den Rückgabewert an, wenn die Funktion ausgeführt wird

Nachtrag 2 Der Lambda-Ausdruck, der an das dritte Argument von reduct übergeben wird, wird aufgerufen, wenn die Pararell-Methode der Stream-Klasse ausgeführt wird. Das Beispielbeispiel gibt jedoch einen geeigneten Ausdruck an. Dies liegt daran, dass das obige Beispiel Listen der Reihe nach verarbeiten und nicht parallel verarbeiten soll. Persönlich halte ich es für zweckmäßig, wenn die Reduzierungsmethode eine Überlastung von (U indentity, BiFunction \ <U, T, U > func) hätte, eine Methode, die nicht für den Parallelbetrieb vorgesehen ist.

Nachtrag 3 Im obigen Beispiel wird die als Argument des Lambda-Ausdrucks übergebene Variable (accum) destruktiv betrieben, daher werde ich eine verbesserte Version schreiben.

MyBunessLogic.java


package test;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class MyBunessLogic {
	public static void main(String args[]){
	    Stream.of("start","middle","end")
	    .reduce(new ArrayList<String>(),MyBunessLogic::operate,(s,v)->s)
	    .forEach(System.out::print);
	}
	
	private static  List<String> operate(List<String> accum,String value){
		List<String> list = new ArrayList<String>(accum);
    	if(list.size()!=0)list.add(" : "+value);
    	else list.add(value);
        return list;
	}
}



Recommended Posts

Liste mit java8StreamAPI :: reduzieren bearbeiten
Reduzieren Sie redundanten Code mit Lombok
Versuchen Sie, PostgreSQL-Arrays mit JDBC zu bearbeiten
Erstellen Sie eine Listenkarte mit LazyMap
[Java] Reduzieren Sie if-Anweisungen mit Enum
Einschlussbeziehungen der Testliste zu AssertJ
Java8-Listenkonvertierung mit Stream Map