Itérer si le contenu d'une carte <String, List <Object >> et affecter les valeurs de la liste <object> dans la liste séparée <double>

John Stef:

J'ai listdes objets qui contiennent coordinateset name. Un exemple de la liste imprimée peut être vu ci - dessous:

[X=0.1, Y=0.1, name=Series1]
[X=0.1, Y=0.2, name=Series1]
[X=0.1, Y=0.3, name=Series1]
[X=0.1, Y=0.4, name=Series2]
[X=0.1, Y=0.5, name=Series2]

Ce que je suis en train de réaliser est de les regrouper sur la base namequi peut être fait avec Java suivante 8 opération:

Map<String, List<Coordinates>> newList = coordinateList.stream()
           .collect(Collectors.groupingBy(Coordinates::getName));

Production:

Series1=[[X=0.1, Y=0.1],[X=0.1, Y=0.2],[X=0.1, Y=0.3]]
Series2=[[X=0.1, Y=0.4],[X=0.1, Y=0.5]]

La dernière étape que je ne l' ai pas encore été en mesure d'atteindre, est de parcourir la Map, créer des listes de X'set Y'sje peux enfin créer un graphique ( chart.addSeries(name, xData, yData);).

Mon approche de ce qui a été jusqu'à présent les éléments suivants:

    List<Double> xData = new LinkedList<Double>();      
    List<Double> yData = new LinkedList<Double>();

    newList.forEach((k, v) -> {
        //TO-DO
    });

A l' intérieur du loopJe voudrais assigner X'set Y'sau correspondant , listsmais sans succès jusqu'à présent.

L' un des problèmes est que Xet Ysont associés à un Coordinatesobjet, donc je ne peux pas les ajouter à la listqui est de type Double. Un autre problème que je pose est que je ne peux pas Xet Yséparément de la list. Je l' ai essayé getX()et , getY()mais sans succès.

Exemple de ce que je voudrais que les listes contiennent:

Pour le key Series1généré listsserait la suivante:

xData=[0.1,0.1,0.1]
yData=[0.1,0.2,0.3]

Pour la clé suivante Série 2:

xData=[0.1,0.1]
yData=[0.4,0.5]
AZRO:

Dans le forEach, (k, v)représente la clé et la valeur de chaque paire, de sorte que vous devez obtenir les Coordinatespuis ses x et y. De plus que vous n'avez pas besoin specificly un LinkedList, utilisez un ArrayList.

Comme vous voulez une série pour chaque paire, votre xDataet yDatadevrait être dans la boucle:

for (Map.Entry<String, List<Coordinates>> serie : newList.entrySet()) {
    List<Double> xData = new ArrayList<>();
    List<Double> yData = new ArrayList<>();

    for (Coordinates coord : serie.getValue()) {
        xData.add(coord.getX());
        yData.add(coord.getY());
    }

    chart.addSeries(serie.getKey(), xData, yData);
}

Choisissez la première option car il est plus facile à utiliser, ne pas utiliser forEachrapidement:

newList.forEach((key, value) -> {
    List<Double> xData = new ArrayList<>();
    List<Double> yData = new ArrayList<>();

    value.forEach(c -> {
        xData.add(c.getX());
        yData.add(c.getY());
    });

    chart.addSeries(key, xData, yData);
});

Avec Streamapi , vous pouvez passer à:

newList.forEach((key, value) -> {
   List<Double> xData = value.stream().map(Coordinates::getX).collect(Collectors.toList());
   List<Double> yData = value.stream().map(Coordinates::getY).collect(Collectors.toList());
   chart.addSeries(key, xData, yData);
});

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=204185&siteId=1
conseillé
Classement