java8写一个按复数个key进行break的共通方法
时间: 2024-05-10 21:20:20 浏览: 134
以下是一个Java 8的通用方法,可按复数个key进行 break:
```java
public static <T> List<List<T>> groupBy(List<T> list, Function<T, List<Object>> keyExtractor) {
Map<List<Object>, List<T>> map = list.stream()
.collect(Collectors.groupingBy(keyExtractor));
return new ArrayList<>(map.values());
}
```
该方法接收一个列表和一个用于提取键的函数。该函数应返回一个列表,其中包含用于分组的多个键。此方法将返回一个列表,其中每个元素都是一个具有相同键的原始列表元素列表。
例如,如果您有一个列表,其中包含三个字段(name,age 和 gender),并且您想要按 name 和 age 进行分组,则可以使用以下代码:
```java
List<Person> persons = Arrays.asList(
new Person("Alice", 25, Gender.FEMALE),
new Person("Bob", 30, Gender.MALE),
new Person("Alice", 30, Gender.FEMALE),
new Person("Charlie", 25, Gender.MALE),
new Person("Bob", 35, Gender.MALE));
List<List<Person>> groups = groupBy(persons, p -> Arrays.asList(p.getName(), p.getAge()));
```
现在,groups 列表将包含两个列表,其中第一个列表包含 Alice (25) 和 Alice (30),而第二个列表包含 Bob (30)、Bob (35) 和 Charlie (25)。
阅读全文