-
Notifications
You must be signed in to change notification settings - Fork 0
/
parallele-streams.html
18 lines (17 loc) · 8.42 KB
/
parallele-streams.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html><html lang="de-ch"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Parallele Streams - Finecloud</title><meta name="description" content="Streams können die Arbeit an Listen von Daten erheblich vereinfachen. Sie haben die Fähigkeit, die vor allem bei grossen Datenmengen extrem nützlich sein kann: Sie können in mehren Threads arbeiten. Das kann die Datenverarbeitung erheblich beschleunigen. Sie müssen dazu nicht selbst neue Threads starten, Streams…"><meta name="generator" content="Publii Open-Source CMS for Static Site"><link rel="stylesheet" href="https://www.finecloud.ch/media/plugins/syntaxHighlighter/prism-black.css"><link rel="canonical" href="https://www.finecloud.ch/parallele-streams.html"><link rel="alternate" type="application/atom+xml" href="https://www.finecloud.ch/feed.xml"><link rel="alternate" type="application/json" href="https://www.finecloud.ch/feed.json"><meta property="og:title" content="Parallele Streams"><meta property="og:site_name" content="Finecloud"><meta property="og:description" content="Streams können die Arbeit an Listen von Daten erheblich vereinfachen. Sie haben die Fähigkeit, die vor allem bei grossen Datenmengen extrem nützlich sein kann: Sie können in mehren Threads arbeiten. Das kann die Datenverarbeitung erheblich beschleunigen. Sie müssen dazu nicht selbst neue Threads starten, Streams…"><meta property="og:url" content="https://www.finecloud.ch/parallele-streams.html"><meta property="og:type" content="article"><link rel="shortcut icon" href="https://www.finecloud.ch/media/website/finecloud.png" type="image/png"><link rel="stylesheet" href="https://www.finecloud.ch/assets/css/style.css?v=39da73365516a098a9b73b721fc970e2"><script type="application/ld+json">{"@context":"http://schema.org","@type":"Article","mainEntityOfPage":{"@type":"WebPage","@id":"https://www.finecloud.ch/parallele-streams.html"},"headline":"Parallele Streams","datePublished":"2022-05-31T12:03","dateModified":"2022-06-20T07:10","description":"Streams können die Arbeit an Listen von Daten erheblich vereinfachen. Sie haben die Fähigkeit, die vor allem bei grossen Datenmengen extrem nützlich sein kann: Sie können in mehren Threads arbeiten. Das kann die Datenverarbeitung erheblich beschleunigen. Sie müssen dazu nicht selbst neue Threads starten, Streams…","author":{"@type":"Person","name":"Finecloud","url":"https://www.finecloud.ch/authors/finecloud/"},"publisher":{"@type":"Organization","name":"Finecloud"}}</script><meta name="google-site-verification" content="seFY9U12uiEq5U3_MyZiX6XWzk0AVFl9zITr2ZKsytY"></head><body><div class="site-container"><header class="top" id="js-header"><a class="logo" href="https://www.finecloud.ch/">Finecloud</a><nav class="navbar js-navbar"><button class="navbar__toggle js-toggle" aria-label="Menu" aria-haspopup="true" aria-expanded="false"><span class="navbar__toggle-box"><span class="navbar__toggle-inner">Menu</span></span></button><ul class="navbar__menu"><li><a href="https://www.finecloud.ch/" target="_self">Blog</a></li><li><a href="https://www.finecloud.ch/tags/" target="_self">Tags</a></li></ul></nav><div class="search"><div class="search__overlay js-search-overlay"><div class="search__overlay-inner"><form action="https://www.finecloud.ch/search.html" class="search__form"><input class="search__input js-search-input" type="search" name="q" placeholder="search..." aria-label="search..." autofocus="autofocus"></form><button class="search__close js-search-close" aria-label="Close">Close</button></div></div><button class="search__btn js-search-btn" aria-label="Search"><svg role="presentation" focusable="false"><use xlink:href="https://www.finecloud.ch/assets/svg/svg-map.svg#search"/></svg></button></div></header><main><article class="post"><div class="hero"><figure class="hero__image hero__image--overlay"><img src="https://www.finecloud.ch/media/website/download.jpg" srcset="https://www.finecloud.ch/media/website/responsive/download-xs.jpg 300w, https://www.finecloud.ch/media/website/responsive/download-sm.jpg 480w, https://www.finecloud.ch/media/website/responsive/download-md.jpg 768w, https://www.finecloud.ch/media/website/responsive/download-lg.jpg 1024w, https://www.finecloud.ch/media/website/responsive/download-xl.jpg 1360w, https://www.finecloud.ch/media/website/responsive/download-2xl.jpg 1600w" sizes="100vw" loading="eager" alt=""></figure><header class="hero__content"><div class="wrapper"><div class="post__meta"><time datetime="2022-05-31T12:03">Mai 31, 2022</time></div><h1>Parallele Streams</h1></div></header></div><div class="wrapper post__entry"><p>Streams können die Arbeit an Listen von Daten erheblich vereinfachen. Sie haben die Fähigkeit, die vor allem bei grossen Datenmengen extrem nützlich sein kann: Sie können in mehren Threads arbeiten. Das kann die Datenverarbeitung erheblich beschleunigen.</p><p>Sie müssen dazu nicht selbst neue Threads starten, Streams erledigen das für Sie. Manchmal können Sie einen Stream gleich als einen parallelen Stream erzeugen, zum Beispiel, indem Sie an einer Collection parallelStream anstelle von stream aufrufen. Es ist aber auch möglich einen Stream nachträglich in einen parallelen Stream umzuwandeln, indem die Methode parallel gerufen wird, oder wieder in einen sequenziellen Stream, also einen Stream, der in nur einem Thread verarbeitet wird, mit der Methode sequential. Beide Methoden sind intermediär, dadurch können Sie sogar in einer Pipeline einige Schritte parallel und andere sequenziell ausführen:</p><p><code>studentenDatei</code><br><code> .lines()</code><br><code> .parallel()</code><br><code> .map(line -> parseStudent(line))</code><br><code> .filter(student -> student.getNotendurchschnitt() >= 5.0)</code><br><code> .sequential()</code><br><code> .forEach(student -> schreibeInDatei(student)); </code></p><p>Im Beispiel wird eine Datei mit Studentendaten eingelesen, darin werden alle Studenten mit einem Notendurchschnitt von 5.0 oder höher in eine neue Datei geschrieben. Dazu werden zunächst die aus der Datei gelesenen Strings in Student-Objekte gemappt und nach Notendurchschnitt gefiltert. Diese Operationen können parallel ausgeführt werden, ohne dass es zu Fehlern kommt. In die Ausgabedatei muss aber ein Datensatz nach dem anderen geschrieben werden, es können nicht mehrere Threads gleichzeitig in dieselbe Datei schreiben. Dazu wird von dem terminalen <em>forEach</em> der Stream wieder sequenziell gemacht. So sind die Aufgaben, die in mehreren Threads verarbeitet werden können, parallel, aber die, bei denen es nicht geht, sequenziell.</p></div><footer class="wrapper post__footer"><p class="post__last-updated">This article was updated on Juni 20, 2022</p><ul class="post__tag"><li><a href="https://www.finecloud.ch/tags/java/">java</a></li><li><a href="https://www.finecloud.ch/tags/lambda/">lambda</a></li><li><a href="https://www.finecloud.ch/tags/parallel/">parallel</a></li><li><a href="https://www.finecloud.ch/tags/softwareentwicklung/">software development</a></li><li><a href="https://www.finecloud.ch/tags/stream-api/">stream-api</a></li></ul><div class="post__share"></div></footer></article></main><footer class="footer"><div class="footer__copyright"><p>Powered by Publii</p></div><button onclick="backToTopFunction()" id="backToTop" class="footer__bttop" aria-label="Back to top" title="Back to top"><svg><use xlink:href="https://www.finecloud.ch/assets/svg/svg-map.svg#toparrow"/></svg></button></footer></div><script>window.publiiThemeMenuConfig = {
mobileMenuMode: 'sidebar',
animationSpeed: 300,
submenuWidth: 'auto',
doubleClickTime: 500,
mobileMenuExpandableSubmenus: true,
relatedContainerForOverlayMenuSelector: '.top',
};</script><script defer="defer" src="https://www.finecloud.ch/assets/js/scripts.min.js?v=6ca8b60e6534a3888de1205e82df8528"></script><script>var images = document.querySelectorAll('img[loading]');
for (var i = 0; i < images.length; i++) {
if (images[i].complete) {
images[i].classList.add('is-loaded');
} else {
images[i].addEventListener('load', function () {
this.classList.add('is-loaded');
}, false);
}
}</script><script defer="defer" src="https://www.finecloud.ch/media/plugins/syntaxHighlighter/prism.js"></script></body></html>