2017-04-18 2 views
0

Ich habe ein verteiltes System von 4 Arbeiter und jeder senden 1 Map < String, MyClass> Objekt an den Druckminderer, um sie zu einem Arraylist < MyClass>Reduce Map-Objekt in Arraylist

zu reduzieren Die Art, wie ich mich dem annähern möchte, besteht darin, alle Map-Elemente von den Arbeitern in eine ArrayList zu sammeln und dann mit parallelem Stream die Methode reduce zu verwenden, um sie in eine Liste zu reduzieren, die ich in den Reducer initialisiert habe. Hier ist mein Code:

ArrayList<MyClass> result = new ArrayList<MyClass>(); 
    maps.parallelStream().reduce(null, (res, m)->{ 
     result.add(m.get(key)); 
    }); 

ich folgende Kompilierungsfehler auf der Verringerung Methode erhalten:

Verfahren reduzieren (Map < String, Anfahrt>, BinaryOperator < Map < String, Anfahrt >>) in der Art Stream-< Karte < String, Anfahrt>> ist nicht anwendbar für die Argumente (null, (< kein Typ> res, < kein Typ> m) -> {})

+0

Keine Notwendigkeit für den parallelen Strom. Verwenden Sie die Methode [addAll] (https://docs.oracle.com/javase/8/docs/api/java/util/List.html#addAll-java.util.Collection-) in der Liste, um alle Werte hinzuzufügen die Karten, die Sie mit [values] erhalten (https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#values---). –

+2

Es gibt keine 'java.util.Map # parallelStream' ... Aber vielleicht können Sie das verwenden:' Liste objects = maps.values ​​(). ParallelStream(). Collect (Collectors.toList()); ' –

+0

Vielleicht Verwenden Sie 'new ArrayList <> (maps.values ​​());' – SilverNak

Antwort

1

Unter der Annahme, list ist die Liste der Karten, versuchen Sie Folgendes: