GroupingBy in Streams with scallingandthen -Methode -> So entfernen Sie optional und verwenden Sie Max auf der Karte :) Java

Java-Forum
Anonymous
 GroupingBy in Streams with scallingandthen -Methode -> So entfernen Sie optional und verwenden Sie Max auf der Karte :)

Post by Anonymous »

scheint die Konzepte von Gruppingby & Collectors & Sorting nicht ganz zu verstehen. Erhalten Sie dann eine Kategorie mit maximaler Menge und drucken Sie es auf dem Bild als Einzelkartenzeile mit Top -Wert < /p>
3 Klassen aus (2 Datensätze: Produkt & Reihenfolge + Haupt). Im Main gibt es eine Liste. Neue Bestellungen < /p>
Klasse Produkt: < /p>
public record Product(String name, BigDecimal price, String category)
< /code>
Klasse Order: < /p>
public record Order(Product product, int quantity, BigDecimal discount)

public BigDecimal priceWithDiscount(){
return product.price().multiply(BigDecimal.ONE.subtract(discount));
}
< /code>
Klasse Haupt < /p>
List orders = List.of(
new Order(new Product("chleb", new BigDecimal(5), "A"),10, new BigDecimal("0.1")),
new Order(new Product("maslo", new BigDecimal(6), "A"),5, new BigDecimal("0.2")),
new Order(new Product("szynka", new BigDecimal(25), "B"),10, new BigDecimal("0")),
new Order(new Product("kielbasa", new BigDecimal(16),"C"),5, new BigDecimal("0")),
new Order(new Product("woda", new BigDecimal(3),"B"),15, new BigDecimal("0.1")),
new Order(new Product("ocet", new BigDecimal(3),"A"),8, new BigDecimal("0.3")),
new Order(new Product("margaryna", new BigDecimal(4),"B"),12, new BigDecimal("0.5")),
new Order(new Product("maslo", new BigDecimal(8),"C"),5, new BigDecimal("0.2"))
)
< /code>
Unter meiner Implementierung der Gruppierung: < /p>
Map summedQuantitiesPerCategory = orders //no 1.
.stream()
.collect(Collectors.groupingBy(p -> p.product().category(),
Collectors.collectingAndThen(
Collectors.mapping(p -> p.quantity(), Collectors.toList()),
quantity -> quantity.stream().reduce((x, y) -> x + y)
)));

summedQuantitiesPerCategory
.entrySet()
.stream()
.sorted(Comparator.comparing(p -> p.getValue())) // no2.
.limit(1);
< /code>
Fragen: < /p>
  • So werden Sie dieses optionale Anteil und sehen Sie nur Ganzzahl als Wert in der Karte. Dann wäre es einfach zu sortieren. Ich denke, < /li>
    Wie man die Karte mithilfe der Methode sortiert oder etwas Einfacheres wie z. max?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post