Ich habe eine Liste von Studenten und jeder Student kann für ein paar Themen registrieren. Daher wird jeder Student eine Liste von Themen haben. Ich würde gerne eine Gruppierung über Subject mit Java 8 Features machen. Ich bin nicht in der Lage, einen Weg zu finden. Jede Hilfe wird geschätzt.java 8 groupingBy
-1
A
Antwort
1
Dies ist nur ein Beispiel, in dem groupBy
verwendet wird. Sie können viele andere Beispiele im Internet finden.
Gruppieren nach Preis [Dieses Beispiel aus here genommen wird]: Collectors.groupingBy
und Collectors.mapping
Beispiel
public static void main(String[] args) {
//3 apple, 2 banana, others 1
List<Item> items = Arrays.asList(
new Item("apple", 10, new BigDecimal("9.99")),
new Item("banana", 20, new BigDecimal("19.99")),
new Item("orang", 10, new BigDecimal("29.99")),
new Item("watermelon", 10, new BigDecimal("29.99")),
new Item("papaya", 20, new BigDecimal("9.99")),
new Item("apple", 10, new BigDecimal("9.99")),
new Item("banana", 10, new BigDecimal("19.99")),
new Item("apple", 20, new BigDecimal("9.99"))
);
//group by price
Map<BigDecimal, List<Item>> groupByPriceMap =
items.stream().collect(Collectors.groupingBy(Item::getPrice));
System.out.println(groupByPriceMap);
// group by price, uses 'mapping' to convert List<Item> to Set<String>
Map<BigDecimal, Set<String>> result =
items.stream().collect(
Collectors.groupingBy(Item::getPrice,
Collectors.mapping(Item::getName, Collectors.toSet())
)
);
System.out.println(result);
}
Ausgabe
{
19.99=[
Item{name='banana', qty=20, price=19.99},
Item{name='banana', qty=10, price=19.99}
],
29.99=[
Item{name='orang', qty=10, price=29.99},
Item{name='watermelon', qty=10, price=29.99}
],
9.99=[
Item{name='apple', qty=10, price=9.99},
Item{name='papaya', qty=20, price=9.99},
Item{name='apple', qty=10, price=9.99},
Item{name='apple', qty=20, price=9.99}
]
}
//group by + mapping to Set
{
19.99=[banana],
29.99=[orang, watermelon],
9.99=[papaya, apple]
}
1
Einer meines Freundes schlug vor, diese Lösung und es funktionierte gut
package grpBy;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
class Pair {
Subject sub1;
Student student;
public Pair(Student student, Subject sub1) {
this.sub1 = sub1;
this.student = student;
}
public String getSub1() {
return sub1.name;
}
public String getStudent() {
return student.name;
}
static Pair of(Student stu, Subject sub) {
return new Pair(stu, sub);
}
}
public class Test2 {
public static void main(String[] args) {
Subject maths = new Subject("maths", 1);
Subject chemi = new Subject("chemi", 1);
Subject phy = new Subject("phy", 1);
Subject bio = new Subject("bio", 1);
List<Subject> s1 = new ArrayList<>();
s1.add(maths);
s1.add(chemi);
List<Subject> s2 = new ArrayList<>();
s2.add(maths);
s2.add(phy);
List<Subject> s3 = new ArrayList<>();
s3.add(bio);
s3.add(phy);
Student jack = new Student(1, "jack", s1);
Student jil = new Student(2, "jil", s2);
Student john = new Student(3, "john", s3);
List<Student> students = new ArrayList();
students.add(jack);
students.add(jil);
students.add(john);
Map<String, List<String>> m = students.stream().
flatMap(student -> student.subjects.stream().map(subject -> Pair.of(student, subject))).
collect(Collectors.groupingBy(e -> e.getSub1(),
Collectors.mapping(e -> e.getStudent(),
Collectors.toList())));
System.out.println(m);
}
}
Verwandte Themen
- 1. Java 8 Stream-groupingby
- 2. Java 8 GroupingBy in Peek
- 3. Java 8 groupingBy auf generische Sammlung
- 4. Java 8 groupingby mit benutzerdefinierten Schlüsseln
- 5. Java 8 Stream: groupingBy mit mehreren Collectors
- 6. Java 8 stream.collect (... groupingBy (... Mapping (... Verringerung))) reduziert BinaryOperator Nutzung
- 7. Java 8 GroupingBy mit Collectors für ein Objekt
- 8. java 8 stream wie zu groupingBy im Ergebnis groupyBy?
- 9. zyklisches Inferenz java Lambda groupingby
- 10. Java 8 Streams: Zählwerte
- 11. Wie "ungeordnete" "distinct()" und "groupingBy"
- 12. Java 8 und Java 8
- 13. Java 8 Stream-Gruppierungby ohne Rückgabe Liste
- 14. groupingBy Klassifikator mit mehreren Schlüsseln
- 15. So gruppieren Objekte in Java 8
- 16. Java 8 lambdas Gruppierung von mehreren Feldern
- 17. Java 8 Streams gruppieren nach einem optionalen Attribut
- 18. Wie verwende ich Java 8 Collectors groupingBy, um eine Map mit einer Map der Collection zu erhalten?
- 19. Gruppierung nach mehreren Feldnamen in Java 8
- 20. Java 8 Gruppierung mit benutzerdefinierten Kollektor?
- 21. HttpServletRequest.getRemoteAddr() leer für Tomcat 8 Java 8
- 22. Tomcat 8 und Java 8: Hohe Speichernutzung
- 23. Tomcat 8 Maven Plugin für Java 8
- 24. Java 8 Hash Map
- 25. Eclipse Java-Upgrade 8
- 26. Java 8 - stream Ideologie
- 27. Java 8 verkettete Methodenreferenz?
- 28. Java 8 Jackson Validierung
- 29. Java 8 List.sort Verwendung
- 30. Java 8 Partitionsliste