<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://mletkin.net/index.php?action=history&amp;feed=atom&amp;title=Streams%3A_Zeilennummern</id>
	<title>Streams: Zeilennummern - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://mletkin.net/index.php?action=history&amp;feed=atom&amp;title=Streams%3A_Zeilennummern"/>
	<link rel="alternate" type="text/html" href="https://mletkin.net/index.php?title=Streams:_Zeilennummern&amp;action=history"/>
	<updated>2026-05-06T13:43:37Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in MimiPedia</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://mletkin.net/index.php?title=Streams:_Zeilennummern&amp;diff=128&amp;oldid=prev</id>
		<title>Ullrich: Die Seite wurde neu angelegt: „Category:Java Mit Java eine Datei zu lesen und in einen Stream zu vrewandeln ist mit Java extrem einfach und erlaubt kompakte Verarbeitung. Hier wird eine…“</title>
		<link rel="alternate" type="text/html" href="https://mletkin.net/index.php?title=Streams:_Zeilennummern&amp;diff=128&amp;oldid=prev"/>
		<updated>2023-09-20T06:33:03Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „&lt;a href=&quot;/index.php?title=Kategorie:Java&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Kategorie:Java (Seite nicht vorhanden)&quot;&gt;Category:Java&lt;/a&gt; Mit Java eine Datei zu lesen und in einen Stream zu vrewandeln ist mit Java extrem einfach und erlaubt kompakte Verarbeitung. Hier wird eine…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Java]]&lt;br /&gt;
Mit Java eine Datei zu lesen und in einen Stream zu vrewandeln ist mit Java extrem einfach und erlaubt kompakte Verarbeitung.&lt;br /&gt;
Hier wird eine Datei gelesen, die Zeilen in Objekte verpackt und diese gespeichert:&lt;br /&gt;
&lt;br /&gt;
{{java| code=&lt;br /&gt;
private List&amp;lt;Record&amp;gt; content;  &lt;br /&gt;
public void read(Path file) {&lt;br /&gt;
    try (Stream&amp;lt;String&amp;gt; stream = Files.lines(file, ENCODING)) {&lt;br /&gt;
        content = stream.map(this::toRecord).collect(Collectors.toList());&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            errors.add(e.getMessage());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
private Record toRecord(String line) {&lt;br /&gt;
    // ...&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
Was aber, wenn die Record-Objekte die Nummer der Zeile in der Datei enthalten sollen?&lt;br /&gt;
Das geht völlig am Konzept des Streams vorbei, kann aber – wenn&amp;#039;s nicht zu streng zugeht – mit Java-Bordmitteln recht einfach hingebogen werden.&lt;br /&gt;
&lt;br /&gt;
Nehemen wir an, {{java|Record}} hätte eine Methode {{java|setLineNum(int num)}} die die Zeilen-Nummer setzt und basteln – ganz naiv – das hier:&lt;br /&gt;
{{java|code=&lt;br /&gt;
public void read (Path file) {&lt;br /&gt;
    try (Stream&amp;lt;String&amp;gt; stream = Files.lines(file, ENCODING)) {&lt;br /&gt;
        int num = 1;&lt;br /&gt;
        content = stream.map(this::toRecord) //&lt;br /&gt;
            .peek(r -&amp;gt; r.setLineNum(num++)) //&lt;br /&gt;
            .collect(Collectors.toList());&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            errors.add(e.getMessage());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
Dann haut uns das der Compiler um die Ohren, denn alle Variablen die in Lambda-Ausdrücken gebraucht werden müssen &amp;quot;effectively immutable&amp;quot; sein. Wir versuchen num bei jedem Objekt im Stream zu verändern und das darf nicht sein.&lt;br /&gt;
&lt;br /&gt;
Also kapseln wir die Inkrementierung einfach in ein Objekt. Was innerhalb  des Objekts geschieht, geht den Compiler nichts an...&lt;br /&gt;
{{java|code=&lt;br /&gt;
private static class Counter {&lt;br /&gt;
    private long number = 1;&lt;br /&gt;
    public long inc() {&lt;br /&gt;
         return number++;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
Jetzt können wir einen Counter  erzeugen und verwenden:&lt;br /&gt;
{{java|code=&lt;br /&gt;
public void read (Path file) {&lt;br /&gt;
    try (Stream&amp;lt;String&amp;gt; stream = Files.lines(file, ENCODING)) {&lt;br /&gt;
        Counter ctr = new Counter();&lt;br /&gt;
        content = stream.map(this::toRecord) //&lt;br /&gt;
            .peek(r -&amp;gt; r.setLineNum(ctr.inc())) //&lt;br /&gt;
            .collect(Collectors.toList());&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            errors.add(e.getMessage());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Ullrich</name></author>
	</entry>
</feed>