Stream Array List - Frage

werdas34

Bekanntes Mitglied
Hallo,

meine Aufgabe ist es eine Datei mittels Stream einzulesen und dann in eine Map zu packen.
Inhalt der Datei:
Baywa, Gruberstr. 60B 85586 Poing, Alcohol, Gardening Tools, Plants
Rewe, Saturnstr. 61 85609 Aschheim, Food, Sanitary Products, Beverage
Conrad, Tal 29 80331 Muenchen, Computer, Electronic
Aldi Sued, Muenchener Str. 34 85560 Ebersberg, Food, Gardening Tools, Sanitary Products, Beverage
Die Map soll so aufgebaut werden Map<Corporations, List<String>>. Corporations beinhaltet den Namen der Firma und die Adresse. In die Liste sollen die Kategorien, die die Firma anbietet.
Der erste Schritt: das einlesen:
Code:
        Path path = Paths.get("corporations.txt");
       Files.lines(path)
Nur weiß ich nicht wie ich den Stream splitten soll. es ginge mit
Code:
       .forEach(n -> n.split(", "));
Nur kann ich damit dann nichts anfangen, da das ein terminierender Operator ist und ich die Ausgabe nicht in einer Variable speichern kann.

Und dann kommt mein nächstes Problem. Wenn ich dann die 4 splitArrays hätte, wie schreibe ich mit Lambda und Stream einen Ausdruck der, die Liste mit Artiklen füllt. Position 0 und 1 sind für das Corporation Objekt, aber dann der Rest, wie mach ich das? mit .skip(2)?

Es soll auschließlich Lambda/Stream verwendet werden. Ohne diese Java8 Neuerungen habe ich die Aufgabe bereits gelöst-

thx
mfg werdas34
 

JCODA

Top Contributor
Denke es gibt eine bessere Lösung, aber vielleicht hilft es ja:
https://repl.it/@game4you/StreamToMap

Java:
import java.nio.file.*;
import java.util.stream.*;
import java.util.*;
class Main {
  public static void main(String[] args) {
    try{
      Path path = Paths.get("corporations.txt");
      Map<Corp,List<String>> m = Files.lines(path).map(s -> Arrays.asList(s.split(","))).
      collect(
        Collectors.toMap(
          data -> new Corp(
              data.get(0), data.get(1)
          ),
          data -> data.subList(2, data.size())
        )
      );
      m.entrySet().stream().forEach(System.out::println);    
    }catch(Exception e){
      e.printStackTrace();
    }
  }
}
 

werdas34

Bekanntes Mitglied
Danke. Hat super funktioniert.

Habe jetzt ein ähnliches Problem.
Aufgabe:
Lese aus einer Datei die Stadtnamen aus und der erste Eintrag ist ein Knoten und die weiteren Städte sind die Nachbarsstädte zu denen eine Verbindung besteht.
Diese Verbindung ist symmetrisch. Heißt StadtA hat Verbindung zu StadtB dh. also auch der Knoten StadtB hat eine Verbinung zu StadtA.
In der Datei wird nur einmal eine Verbindung erwähnt. Da die weiteren dann automatisch zwecks symmetrie erfolgen.
Dateiinhalt:
Code:
Regensburg Passau Nuernberg Muenchen Augsburg
Nuernberg Augsburg Wuerzburg
Muenchen Passau Augsburg
Passau
Augsburg Wuerzburg
Wuerzburg
Aufgabe: 1. Löse dies mit Mitteln aus Java7. Habe ich bereits.
2. Aufgabe Schreibe eine zweite Factory-Methode make nur mit Lambda/Streams
Bei zweitens hänge ich:
Hier mal der gesamte Code: (Objektvariablen und Funktionsköpfe sind so vorgebenen)
Code:
public class Graph {
    private final Map<String, Set<String>> nodesToConnections = new HashMap<>();

    // a) Stadt einfügen in Map wenn noch nicht enthalten
    public void addNode(String node) {
        if (!nodesToConnections.containsKey(node)) {
            nodesToConnections.put(node, new HashSet<>());
        }
    }

    // b) Verbindungen zwischen den Städten machen - symmetisch
    public void addConnection(String from, String to) {
        Set<String> setFrom = nodesToConnections.get(from);
        setFrom.add(to);
        nodesToConnections.put(from, setFrom);
        Set<String> setTo = nodesToConnections.get(to);
        setTo.add(from);
        nodesToConnections.put(to, setTo);
    }

    //c)
    public static Graph make(Path file) throws IOException {
        Graph graph = new Graph();
        try {
        List<String> lines = Files.readAllLines(file);
        for (int i = 0; i < lines.size(); i++) {
            String[] splitLine = lines.get(i).split(" ");
            graph.addNode(splitLine[0]);
        }
        for (int i = 0; i < lines.size(); i++) {
            String[] splitLine = lines.get(i).split(" ");
            if (splitLine.length > 1) {
                for (int j = 1; j < splitLine.length; j++) {
                    graph.addConnection(splitLine[0], splitLine[j]);
                }
            }
        }
        }catch(Exception e) {
           e.printStackTrace();
        }
        return graph;
    }
    //d)
    public static Graph make2(Path file) throws IOException {
        Graph graph = new Graph();
         graph.nodesToConnections = Files.lines(file)
                  .map(s -> Arrays.asList(s.split(" ")))
                  .collect(
            Collectors.toMap(
              data -> data.get(0),
              data ->  ));
      
      
      
        return graph;
    }
  
    public static void main(String[] args) throws IOException {
        Graph graph = Graph.make(Paths.get("Graph.txt"));
        System.out.println(graph.nodesToConnections.entrySet());
    }

}

Das Problem ist das ich nicht weiß, wie ich die Map values fülle. Beim ersten mal habe ich ne weitere Schleife genommen und dann immer die jeweiligen Verbindungen gesetzt. Aber wie setze ich das in Streams um ?

thx
mfg werdas34
 

werdas34

Bekanntes Mitglied
Indem Du die Methoden von Graph verwendest.
Ich weiß, das ich die Methode addConnection benutzen muss.
Code:
 for (int j = 1; j < splitLine.length; j++) {
                    graph.addConnection(splitLine[0], splitLine[j]);
                }
Nur wie realisiere ich in einem Stream das? Soweit ich es geschrieben habe, fügt er in die Map die Knoten ein. Wie schaffe ich es das er dann den jeweilgen Knoten nimmt und dazu dann die richtigen Verbindungen setzt?
 

mihe7

Top Contributor
Naja, Du ersetzt in erster Linie die for-Schleifen durch Streams. Wenn man das direkt macht, würde aus
Java:
        for (int i = 0; i < lines.size(); i++) {
            String[] splitLine = lines.get(i).split(" ");
            graph.addNode(splitLine[0]);
        }
z. B. erstmal
Java:
        lines.stream()
            .map(line -> line.split(" ")[0])
            .forEach(graph::addNode);

Das forEach ersetzt dabei Deine Schleife. Analog dazu kannst Du den Rest übersetzen. Da ich Dir nicht einfach die Lösung hinschreiben will, darfst Du das selbst versuchen. Noch ein Tipp: nachdem Du verschachtelte for-Schleifen hast, wird es bei einer direkten Übersetzung auch auf verschachteltes forEach hinauslaufen. Und alles, was Du brauchst, ist hier im Thread vorhanden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
H Datentypen Byte-Array aus Stream lesen Java Basics - Anfänger-Themen 3
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
W Stream und LocalDate Java Basics - Anfänger-Themen 15
M Stream mit den ersten n natürlichen Zahlen Java Basics - Anfänger-Themen 4
berserkerdq2 Wo ist der SInn, dass man den Stream, den ich zum Schreiben nutze, outputstream nenne? Java Basics - Anfänger-Themen 5
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
K Erste Schritte Stream-Aufruf vereinfachen Java Basics - Anfänger-Themen 3
I Datei als Stream aus Ressource laden? Java Basics - Anfänger-Themen 2
O Alternative zu Stream.forEach() Java Basics - Anfänger-Themen 6
Dimax stream in string[] speichern Java Basics - Anfänger-Themen 6
S Java Stream API Java Basics - Anfänger-Themen 6
A Stream Java Basics - Anfänger-Themen 14
N String N-Gramme mit Stream erstellen Java Basics - Anfänger-Themen 7
T Buffered Stream leert Txt File Java Basics - Anfänger-Themen 3
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
B Text-Datei nur in Stream speichern und dann ausgeben Java Basics - Anfänger-Themen 3
J Gefilterten Stream über die Konsole ausgeben Java Basics - Anfänger-Themen 1
J Count und Copy in Stream<Path> Java Basics - Anfänger-Themen 11
W for Schleife in allgemeingültiges Konstrukt aus Stream und Lambdas Java Basics - Anfänger-Themen 6
G refactoring mit stream Java Basics - Anfänger-Themen 27
P Java Verketten von Stream - Bedeutung der Anweisungen? Java Basics - Anfänger-Themen 3
nightsky_ Methoden (Stream) Collectors.toMap() Java Basics - Anfänger-Themen 2
W HTTP-Stream auf Ajax umbauen Java Basics - Anfänger-Themen 7
elischa Client-Server IO und Stream Steuerung ? Java Basics - Anfänger-Themen 2
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
M Panel erstellen, welches ein Control erhält. Ausgabe soll über einen Stream erfolgen. Java Basics - Anfänger-Themen 0
E Stream closed - Obwohl nicht manuell geschlossen! Java Basics - Anfänger-Themen 0
N Java.io.ioexception: Stream closed Java Basics - Anfänger-Themen 2
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
S Input/Output nullpointerException beim schliessen von stream Java Basics - Anfänger-Themen 3
A Integer aus Stream to Double Java Basics - Anfänger-Themen 7
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
M Java Stream?! Java Basics - Anfänger-Themen 8
S Input/Output Data-Input/Output-Stream Java Basics - Anfänger-Themen 2
J Input/Output Auf effiziente Weise einen Stream auszulesen Java Basics - Anfänger-Themen 5
M Stream close Java Basics - Anfänger-Themen 6
A Prüfen ob Datei geöffnet ist bzw Stream finden Java Basics - Anfänger-Themen 2
H exception "java.io.IOException: Stream closed" Java Basics - Anfänger-Themen 10
Burny91 File.delete(file) geht nicht-Offener Stream aber WO? Java Basics - Anfänger-Themen 4
M Audio Stream läuft auf :connection abort: socket write error Java Basics - Anfänger-Themen 2
H Fehler-Stream grafisch umsetzen Java Basics - Anfänger-Themen 4
S Fehler beim Speichern von MP3-Stream Java Basics - Anfänger-Themen 6
bambi0815 Text Datei Stream to Char[][] Java Basics - Anfänger-Themen 7
D JSP: IOException: Stream closed nach dispatchter.forward(..) Java Basics - Anfänger-Themen 13
G Warum bei Stream close() aufrufen. Java Basics - Anfänger-Themen 12
G NoClassDefFoundError: javax/xml/stream/XMLStreamException Java Basics - Anfänger-Themen 23
P Stream Java Basics - Anfänger-Themen 4
alexpetri javax.xml.stream.* nicht gefunden Java Basics - Anfänger-Themen 3
M Stream unvollständig Java Basics - Anfänger-Themen 5
Zed Stream in Variable speichern. Java Basics - Anfänger-Themen 3
M Input/Output Stream aus einem String Java Basics - Anfänger-Themen 2
S Schreib Stream Java Basics - Anfänger-Themen 21
M Stream in String umwandeln Java Basics - Anfänger-Themen 5
K datei komplett als Stream oder ähnliches Java Basics - Anfänger-Themen 4
A Serialisierbarer Stream? - File per RMI versenden Java Basics - Anfänger-Themen 4
R Binary Stream in Bild umwandeln Java Basics - Anfänger-Themen 5
C Position im Objekt-Stream Java Basics - Anfänger-Themen 2
M Ausgabe in String anstatt auf Stream Java Basics - Anfänger-Themen 17
C Stream-Konzept Java Basics - Anfänger-Themen 2
A von Socket-Stream lesen Java Basics - Anfänger-Themen 4
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben