Ich denke, ich mache es irgendwo, aber ich werde die Leistung testen, wenn ich Stream mit Java 8 verwende.
■Java
java
$ java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
■Eclisep
Version: Neon.1a Release (4.6.1)
Streit
--Liste der Zeichenfolge
Dinge die zu tun sind
public void sortList(List<String> list) {
StringBuilder sb = new StringBuilder();
Collections.sort(list);
for (String str : list) {
if (!str.startsWith("Sport")) {
sb.append(str);
}
}
}
public void sortList(List<String> list) {
StringBuilder sb = new StringBuilder();
list.stream()
.filter(str -> !str.startsWith("Sport"))
.sorted()
.forEach(str -> sb.append(str));
}
Führt den Prozess des Schleifens der Testmethode 1 Million Mal 10 Mal aus.
public static void main(String[] args) {
//Liste zur Verwendung in Argumenten für Testmethoden
List<String> list = Arrays.asList(
"Yute"
,"Miyaou"
,"Kimuko"
,"1234567"
,"abcdefg"
,"Pepe Pepe"
);
//Schreiben wir eine Testausführungsschleife mit Stream
IntStream.rangeClosed(1, 10).forEach(i -> {
long start = System.currentTimeMillis();
StreamTest test = new StreamTest();
IntStream.rangeClosed(1, 1000000).forEach(j -> {
test.sortList(list);
});
System.out.println("[time]" + (System.currentTimeMillis() - start) + "(msec)");
});
}
[time]174(msec)
[time]144(msec)
[time]161(msec)
[time]117(msec)
[time]136(msec)
[time]204(msec)
[time]132(msec)
[time]133(msec)
[time]126(msec)
[time]127(msec)
[time]526(msec)
[time]442(msec)
[time]684(msec)
[time]373(msec)
[time]378(msec)
[time]335(msec)
[time]363(msec)
[time]364(msec)
[time]390(msec)
[time]353(msec)
In dem Code, den ich dieses Mal ausprobiert habe, hat es bei Verwendung von Stream doppelt bis mehr als doppelt so lange gedauert.
Da es sich jedoch um eine große Anzahl von Schleifen mit einfacher Verarbeitung handelt, scheint dieses Ergebnis erhalten worden zu sein. (Ich bin der Meinung, dass das gleiche Ergebnis nicht erzielt wird, wenn es in die Praxis umgesetzt wird.)
Da dies die erste Implementierung von Stream ist, ist die Implementierung mit Stream möglicherweise nicht möglich.
In Bezug auf die Lesbarkeit denke ich, dass diejenigen, die bisher an den Code gewöhnt sind, es offensichtlich leichter finden werden, die for
-Anweisung zu verwenden.
Als ich mich daran gewöhnt hatte, war die Syntax mit Stream offensichtlich und ich fand es leicht zu verstehen.
Der folgende Code hat es übrigens etwas schneller gemacht.
public void sortListAsStream(List<String> list) {
StringBuilder sb = new StringBuilder();
list.stream()
.sorted()
.forEach(str -> {
if (!str.startsWith("Sport")) {
sb.append(str);
}
});
}
[time]456(msec)
[time]409(msec)
[time]328(msec)
[time]552(msec)
[time]316(msec)
[time]257(msec)
[time]272(msec)
[time]289(msec)
[time]305(msec)
[time]306(msec)
Recommended Posts