[JAVA] Wie weit ist die richtige Antwort, um den Prozess zu teilen?

Verglichen

FUnction.java


package mk42;

import java.util.List;
import java.util.function.Function;
import java.util.function.UnaryOperator;

/**
 * All method has the same process.
 *
 * @author
 *
 */
public class NotStaticProcessingTest {
	/**
	 * This method contains all process to need.
	 * @param list
	 */
	public void streamTest1(List<String> list) {
		list.stream().map(v -> v + "3").mapToInt(Integer::parseInt).sum();
	}
	/**
	 * This method has 2 functions.
	 * @param list
	 */
	public void streamTest2(List<String> list) {
		list.stream().map(add3.andThen(convertInt)).mapToInt(v -> v).sum();
	}
	/**
	 * This method has 1 functions.
	 * @param list
	 */
	public void streamTest3(List<String> list) {
		list.stream().map(all).mapToInt(v -> v).sum();
	}
	/**
	 * This method has 1 function.
	 * The function has all process.
	 * @param list
	 */
	public void streamTest4(List<String> list) {
		this.sum.apply(list);
	}
	/**
	 * This method has methos instead of function.
	 * @param list
	 */
	public void streamTest5(List<String> list) {
		this.sum(list);
	}

	/** Add 3 */
	private UnaryOperator<String> add3 = v -> v + "3";
	/** Convert to Integer */
	private Function<Object, Integer> convertInt = v -> Integer.parseInt(String.valueOf(v));
	/** all */
	private Function<String, Integer> all = v -> Integer.parseInt(v + "3");
	/** all of them function */
	private Function<List<String>, Integer> sum = v -> v.stream().mapToInt(x -> Integer.parseInt(x + "3")).sum();
	/** all of them method */
	private Integer sum(List<String> list) {
		return list.stream().mapToInt(v -> Integer.parseInt(v + "3")).sum();
	}
}

Mk42.echo ist sysout, es wird separat vorbereitet.

Überprüfung der Verarbeitungsgeschwindigkeit.java


package mk42;

import java.util.Arrays;
import java.util.List;

public class StreamProcessingTest {

	/** constant list */
	private static final List<String> list = Arrays.asList("1", "2", "3");

	/**
	 * main
	 * @param args
	 */
	public static void main(String[] args) {

		// instance
		NotStaticProcessingTest no = new NotStaticProcessingTest();

		/** ----------test1---------- */
		Mk42.echo.accept("stream test 1");
		Long start1 = System.nanoTime();
		no.streamTest1(list);
		Long end1 = System.nanoTime();
		Mk42.echo.accept("Processing TIme : " + (end1 - start1) + "ns");

		/** ----------test2---------- */
		Mk42.echo.accept("stream test 2");
		Long start2 = System.nanoTime();
		no.streamTest2(list);
		Long end2 = System.nanoTime();
		Mk42.echo.accept("Processing TIme : " + (end2 - start2) + "ns");

		/** ----------test3---------- */
		Mk42.echo.accept("stream test 3");
		Long start3 = System.nanoTime();
		no.streamTest3(list);
		Long end3 = System.nanoTime();
		Mk42.echo.accept("Processing TIme : " + (end3 - start3) + "ns");

		/** ----------test4---------- */
		Mk42.echo.accept("stream test 4");
		Long start4 = System.nanoTime();
		no.streamTest4(list);
		Long end4 = System.nanoTime();
		Mk42.echo.accept("Processing TIme : " + (end4 - start4) + "ns");

		/** ----------test5---------- */
		Mk42.echo.accept("stream test 5");
		Long start5 = System.nanoTime();
		no.streamTest5(list);
		Long end5 = System.nanoTime();
		Mk42.echo.accept("Processing TIme : " + (end5 - start5) + "ns");
	}
	/**
	 * As a result.
	 *
	 * stream test 1
	 * Processing TIme : 3630700ns
	 *
	 * stream test 2
	 * Processing TIme : 632701ns
	 *
	 * stream test 3
	 * Processing TIme : 195400ns
	 *
	 * stream test 4
	 * Processing TIme : 151499ns
	 *
	 * stream test 5
	 * Processing TIme : 143600ns
	 */
}

Ergebnis

stream test 1
Processing TIme : 3630700ns
stream test 2
Processing TIme : 632701ns
stream test 3
Processing TIme : 195400ns
stream test 4
Processing TIme : 151499ns
stream test 5
Processing TIme : 143600ns

Grund

Nicht, wo der Prozess aufgeteilt werden soll 1 ist die schnellste, weil ich Integer aufrufe 2 ist langsamer als 3, weil ich andThen in der mittleren Operation verwende

4 und 5 sind der Unterschied zwischen Methode und Funktion

Methode.java


	public void streamTest4(List<String> list) {
		this.sum.apply(list);
	}
	
	public void streamTest5(List<String> list) {
		this.sum(list);
	}
stream test 4
Processing TIme : 151499ns
stream test 5
Processing TIme : 143600ns

Es macht also keinen großen Unterschied, aber die Methode kann etwas schneller sein ...?

Wenn sich die Geschwindigkeit zwischen der Methode und der Funktion nicht wesentlich ändert, wurde die Funktion für eine Zwischenoperation des Streams geboren ...?

Recommended Posts

Wie weit ist die richtige Antwort, um den Prozess zu teilen?
Passen Sie an, wie der Inhalt von Recyclerview aufgeteilt wird
Wie ist der nächste Wert des Time-Objekts korrekt?
So führen Sie einen bestimmten Vorgang aus, wenn die Zurück-Taste im Android-Fragment gedrückt wird
Verwendung der link_to-Methode
Verwendung der include? -Methode
So finden Sie den durchschnittlichen Winkel
Verwendung der Wrapper-Klasse
So geben Sie den Wert aus, wenn sich ein Array im Array befindet
Ich habe versucht zu verstehen, wie die Rails-Methode "redirect_to" definiert ist
Ich habe versucht zu verstehen, wie die Rails-Methode "link_to" definiert ist
So identifizieren Sie den Pfad, auf dem leicht Fehler gemacht werden können
So fügen Sie die Löschfunktion hinzu
[Docker] Erstellen, wenn der Quellcode auf dem Container gebunden ist
[Java] Verwendung der File-Klasse
So löschen Sie die Fehlerbündelung
[Schienen] Verwendung der Kartenmethode
[Java] Verwendung der toString () -Methode
Studieren der Verwendung des Konstruktors (Java)
[Verarbeitung × Java] Verwendung der Schleife
So bestimmen Sie die Anzahl der Parallelen
[Java] So stellen Sie die Datums- und Uhrzeit auf 00:00:00 ein
[Java] So erhalten Sie das aktuelle Verzeichnis
Wie die Website auf dem Bildschirm angezeigt wird
[Verarbeitung × Java] Verwendung der Klasse
So sortieren Sie eine Liste von SelectItems
Wie man die Zehner und Einsen findet
So übergeben Sie den Wert an einen anderen Bildschirm
So erhalten Sie das Datum mit Java
[Java 7] Teilen Sie die Java-Liste und führen Sie den Prozess aus
[Verarbeitung × Java] Verwendung der Funktion
[Java] Verwendung der Calendar-Klasse
Zusammengefasst, wie man die Programmiertreppe hinaufsteigt
Festlegen, wann in junit "Der Konstruktor Empty () ist nicht sichtbar" auftritt
So finden Sie die Ursache des Ruby-Fehlers
Verwendung des Kameramoduls OV7725 (ESP32-WROVER-B)
Wie schreibe ich offline 15. Referenzfrage Antwort
So überprüfen Sie das Protokoll im Docker-Container
So implementieren Sie die Brotkrumenfunktion mit gretel
Wie komme ich zum heutigen Tag?