Je pense que je le fais quelque part, mais je vais essayer les performances lors de l'utilisation de Stream avec Java 8.
■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)
argument
--Liste de chaîne
Choses à faire
--Trier la liste
public void sortList(List<String> list) {
StringBuilder sb = new StringBuilder();
Collections.sort(list);
for (String str : list) {
if (!str.startsWith("Pe")) {
sb.append(str);
}
}
}
public void sortList(List<String> list) {
StringBuilder sb = new StringBuilder();
list.stream()
.filter(str -> !str.startsWith("Pe"))
.sorted()
.forEach(str -> sb.append(str));
}
Exécute le processus de bouclage de la méthode de test 1 million de fois 10 fois.
public static void main(String[] args) {
//Liste à utiliser dans les arguments de méthode de test
List<String> list = Arrays.asList(
"Yute"
,"Miyaou"
,"Kimuko"
,"1234567"
,"abcdefg"
,"Pepe Pepe"
);
//Écrivons une boucle d'exécution de test avec 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)
Dans le code que j'ai essayé cette fois, il a fallu deux à plus de deux fois plus de temps lors de l'utilisation de Stream.
Cependant, comme il s'agit d'un grand nombre de boucles avec un traitement simple, il semble que ce résultat ait été obtenu. (J'ai le sentiment que le même résultat ne sera pas obtenu lorsqu'il sera mis en pratique.)
De plus, puisqu'il s'agit de la première implémentation de Stream, il peut ne pas être possible de l'implémenter à l'aide de Stream.
Concernant la lisibilité, dans le cas de ce test, je pense que ceux qui sont habitués au code jusqu'ici trouveront évidemment plus facile de voir en utilisant l'instruction for
,
Une fois que je m'y suis habitué, la syntaxe utilisant Stream était évidente, et j'ai senti qu'elle était facile à comprendre.
À propos, le code suivant l'a rendu un peu plus rapide.
public void sortListAsStream(List<String> list) {
StringBuilder sb = new StringBuilder();
list.stream()
.sorted()
.forEach(str -> {
if (!str.startsWith("Pe")) {
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