2017-12-03 4 views
1

Hölle Jeder,wie ein Java-Programm mit Stream-Java parallelisieren 8

ich ein vereinfachtes Programm erstellt haben, Ihnen zu zeigen, was ich zu tun bereit bin. Die Idee ist, eine Kante zwischen jedem Vertex zu erstellen.

Die Klasse Vertex:

public class Vertex { 
    private String sequence = new String(); 

    public Vertex() { 
    } 

    public Vertex(String seq) { 
     this.sequence = seq; 
    } 

    @Override 
    public String toString() { 
     return this.sequence.toString(); 
    } 
} 

Die Klasse Rand:

public class Edge { 

    private Vertex source; 
    private Vertex destination; 
    private int weight; 

    public Edge() { 

    } 

    public Edge(Vertex source, Vertex destination, int weight) { 
     this.source = source; 
     this.destination = destination; 
     this.weight = weight; 

    } 
} 

Aufrufprogramm:

public class Example { 


    public static void main(String[] args) { 

      ArrayList <Vertex> listOfVertex = new ArrayList<>(); 
      listOfVertex.add(new Vertex("One")); 
      listOfVertex.add(new Vertex("Two")); 
      listOfVertex.add(new Vertex("Three")); 

      ArrayList <Edge> listOfEdges = new ArrayList<>(); 
      for (int i = 0; i < 3; i++) { 
       for (int j = 0; j < 3; j++) { 
        if (i==j) 
         continue; 
        int weight = new Random().nextInt(); 
        Edge edge = new Edge(listOfVertex.get(i), listOfVertex.get(j),weight); 
        listOfEdges.add(edge); 
       } 
      } 
     } 
} 

Normalerweise in diesem Schritt die Liste der Kanten haben sollte

  • Edge-1: ein Zwei
  • Edge-2: einen Drei
  • Rand 3: Zwei One
  • Rand 4: Zwei Drei
  • Ränder 5: Three One
  • Rand 6: Drei Zwei

Wie kann Java-Stream verwendet Multithreading zu benutzen? Ich suchte den ganzen Tag, um die Syntax von Java 8 für Stream zu verstehen, aber es ist sehr schwierig.

+0

"Wie kann Java Stream Multithreading verwenden?" - um was zu tun ? – alfasin

+0

Um die beiden for-Schleife quicly zu vervollständigen, weil 1- in meinem realen Programm ich mit einer großen Anzahl von Ecken und 2 zu tun habe - die Konstruktion des Edge dauerte eine lange Zeit zu vervollständigen (schwere Calcul). –

Antwort

3

Es gibt wirklich keinen Grund, Multithreading hier zu verwenden. Wenn du vielleicht Hunderte von Ecken hast. Aber trotzdem:

List<Edge> edges = listOfVertex.parallelStream() 
    .flatMap(v1 -> listOfVertex.stream() 
           .filter(v2 -> v2 != v1) 
           .map(v2 -> createEdge(v1, v2))) 
    .collect(Collectors.toList()); 
+0

Vielen Dank Für Ihr Awnser ist es nur ein vereinfachtes Programm, um das Problem zu erklären. Wenn ich Mein wirkliches Programm setze, wird es niemand lesen. Eine andere Frage, was meinst du mit: createEdge (v1, v2), ist es eine Methode, die An Edge zurückgibt? –

+1

Ja. Er erzeugt eine Kante zwischen v1 und v2 und gibt sie zurück. –

+0

Ja, Ok, nur um ein paar hundert Ecken zu addieren Die Methode createEdge (v1, v2) Nehmen Sie sich Zeit, um eine Kante zurückzugeben, (etwas Berechnung). –

Verwandte Themen