J'ai list
des objets qui contiennent coordinates
et 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 name
qui 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's
et Y's
je 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 loop
Je voudrais assigner X's
et Y's
au correspondant , lists
mais sans succès jusqu'à présent.
L' un des problèmes est que X
et Y
sont associés à un Coordinates
objet, donc je ne peux pas les ajouter à la list
qui est de type Double
. Un autre problème que je pose est que je ne peux pas X
et Y
sé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
Series1
généré lists
serait 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]
Dans le forEach
, (k, v)
représente la clé et la valeur de chaque paire, de sorte que vous devez obtenir les Coordinates
puis 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 xData
et yData
devrait ê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 forEach
rapidement:
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 Stream
api , 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);
});