Essayez Java 8 Stream

Je pense que je le fais quelque part, mais je vais essayer les performances lors de l'utilisation de Stream avec Java 8.

environnement

■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)

Méthode d'essai

argument

--Liste de chaîne

Choses à faire

--Trier la liste

Code qui n'utilise pas Stream

	public void sortList(List<String> list) {
		StringBuilder sb = new StringBuilder();
		Collections.sort(list);
		for (String str : list) {
			if (!str.startsWith("Pe")) {
				sb.append(str);
			}
		}
	}

Code utilisant Stream

	public void sortList(List<String> list) {
		StringBuilder sb = new StringBuilder();
		list.stream()
				.filter(str -> !str.startsWith("Pe"))
				.sorted()
				.forEach(str -> sb.append(str));
	}

Code qui exécute la méthode

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)");
		});
	}

résultat

Code qui n'utilise pas Stream

[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)

Code utilisant Stream

[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)

Conclusion

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

Essayez Java 8 Stream
API Java Stream
Étudier Java 8 (Stream)
Essayez grossièrement Java 9
Terminaison du flux Java
[Java] Traitement de flux
Java 9 Facultatif :: stream
Essayez d'utiliser l'API Stream en Java
Essayez différentes méthodes d'API Java Stream (maintenant)
[Java] Remarque sur les collecteurs de flux
[Java] Génération de flux API-Stream
[Java] API / carte de flux
Pratique de l'API Java8 Stream
À propos de l'opération de réduction du flux Java8
Essayez la valeur de retour Java
Résumé approximatif du flux Java8
Essayez d'utiliser RocksDB avec Java
Essayez la connexion DB avec Java
[Java11] Résumé du flux -Avantages du flux-
Essayez de gratter en utilisant Java [Note]
Essayez d'appeler JavaScript en Java
Essayez de développer Spresense avec Java (1)
Essayez le type fonctionnel en Java! ①
Aide-mémoire de l'API Java Stream
Essayez gRPC avec Java, Maven
API Java Stream en 5 minutes
Flux Java8, résumé de l'expression lambda
Java
[Java] Stream API - Traitement de l'arrêt du flux
[Java] Stream API - Traitement intermédiaire de flux
Java Stream ne peut pas être réutilisé.
[Java] Introduction à l'API Stream
Java
[Java11] Résumé de l'utilisation du flux -Basics-
Application Java pour les débutants: stream
[Java] Opération intermédiaire de l'API Stream
[Java 8] Suppression en double (et vérification en double) avec Stream
Essayez d'implémenter Android Hilt en Java
[Java] Stream (filtrer, mapper, forEach, réduire)
[java8] Pour comprendre l'API Stream
À propos de Lambda, Stream, LocalDate de Java8
[Introduction à Java] À propos de l'API Stream
[Java] Vérification de l'existence des éléments avec Stream
Essayez d'exécuter Selenuim 3.141.59 avec eclipse (java)
Essayez d'utiliser Redis avec Java (jar)
Essayez une expression If en Java
J'ai essayé d'utiliser l'API Java8 Stream
[Java] Essayez de mettre en œuvre à l'aide de génériques
Essayez d'extraire la méthode publique de java
Essayez la communication bidirectionnelle avec gRPC Java
Flux de traitement de base de Java Stream
Essayez d'exécuter AWS X-Ray en Java
Essayez d'implémenter Yuma en Java
Essayez d'utiliser le traçage de méthode IBM Java
Java 8 ~ Stream API ~ pour commencer maintenant
Essayez Eclipse 4.7 Oxygen New 30+ / Java 10 var!
Liste de conversion mutuelle de tableau / liste / flux Java
Conversion de liste Java8 avec Stream map