2017-12-20 8 views
1

Kann mir bitte jemand sagen, wie man die Ergebnisse der inneren Karte mit der äußeren Karte abbildet. Ich habe ein Preispunkt-Objekt mit List-Holding-ID, -Preis, -Rang erstellt, das ich der inneren Karte zugeordnet habe, indem ich für jeden Preispunkt den Mindestrang erhalte, jetzt möchte ich die Ergebnisse mit ihren spezifischen IDs abbilden. DankSo finden Sie den minimalen Rang des Preispunkts

public class Pricepoint { 

String id; 
String pricepoint; 
int rank; 

public Pricepoint(String id,String pricepoint,int rank) 
{ 
    this.id = id; 
    this.pricepoint = pricepoint; 
    this.rank= rank; 
} 


public String getId() { 
    return id; 
} 

public String getPricepoint() { 
    return pricepoint; 
} 

public int getRank() { 
    return rank; 
} 

public static void main(String[] args) 
{ 
    final Comparator<Pricepoint> comp = (p1, p2) -> Integer.compare(p1.getRank(), p2.getRank()); 
    List<Pricepoint> p = new LinkedList<>(); 
    p.add(new Pricepoint("1","PP1",1)); 
    p.add(new Pricepoint("2", "PP1", 2)); 
    p.add(new Pricepoint("3","PP2",3)); 
    p.add(new Pricepoint("4", "PP2", 4)); 
    Map<String,Map<String,Integer>> map1 = p.stream() 
         .collect(Collectors.toMap(Pricepoint::getPricepoint,Pricepoint::getRank,Math::min))// I'm struck here 
+2

Bitte klären Sie Ihre Frage. Wie sehen deine Ergebnisse aus? – Flown

+0

Ich brauche Ausgabe als Preispunkt Datensätze nur mit minimalem Rang als unten {1 = pp1 = 1,3 = pp2 = 3} – user9122587

Antwort

1

Es scheint, dass Sie so etwas wie dies wollen, wenn ich mich nicht täusche:

Map<String, Map<String, Integer>> map1 = p.stream() 
      .collect(Collectors.collectingAndThen(
        Collectors.groupingBy(
          Pricepoint::getPricepoint, 
          Collectors.collectingAndThen(
            Collectors.minBy(Comparator.comparing(Pricepoint::getRank)), 
            Optional::get)), 
        (Map<String, Pricepoint> x) -> { 
         return x.entrySet() 
           .stream() 
           .collect(Collectors.groupingBy(
             entry -> entry.getValue().getId(), 
             Collectors.toMap(Entry::getKey, e -> e.getValue().getRank()))); 
        })); 

    System.out.println(map1); 

aber das ist nur wahnsinnig kompliziert ... ich ehrlich hoffen, dass Sie wirklich einen Anwendungsfall für diese haben.

+0

Danke für den Code, aber ich brauche Ausgabe als {1 = pp1 = 1,3 = pp2 = 3} – user9122587

+0

@ user9122587 siehe Bearbeiten – Eugene

Verwandte Themen