lambda分组方法Java
时间: 2023-05-11 13:06:51 浏览: 134
Lambda分组方法Java可以使用Java 8中的Stream API中的groupingBy()方法来实现。例如,如果我们有一个Student类,我们可以按照他们的年龄来分组:
Map<Integer, List<Student>> studentsByAge = students.stream()
.collect(Collectors.groupingBy(Student::getAge));
这将返回一个Map,其中键是年龄,值是具有该年龄的学生列表。
相关问题
JAVA lambda List 分组
在Java中,可以使用lambda表达式和Stream API来对List进行分组操作。下面是一个示例代码:
```java
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "cat", "dog", "elephant");
// 使用lambda表达式和Stream API对List进行分组
Map<Character, List<String>> groups = list.stream()
.collect(Collectors.groupingBy(s -> s.charAt(0)));
// 打印分组结果
groups.forEach((key, value) -> System.out.println(key + ": " + value));
}
}
```
运行上述代码,输出结果如下:
```
a: [apple]
b: [banana]
c: [cat]
d: [dog]
e: [elephant]
```
上述代码中,我们使用`stream()`方法将List转换为一个流,然后使用`Collectors.groupingBy()`方法对流中的元素进行分组操作。`groupingBy()`方法接受一个lambda表达式作为参数,该lambda表达式定义了根据什么规则进行分组。在本例中,我们使用`s -> s.charAt(0)`来按照每个字符串的首字母进行分组。
最后,我们使用`forEach()`方法遍历分组结果,并打印出每个分组的键值对。
java lambda分组后再排序
可以使用Java 8中的Stream API和lambda表达式来实现分组后再排序。
假设有一个Student类,包含姓名(name)、年龄(age)和成绩(score)属性,现在需要将学生按照年龄分组后,再按照成绩进行排序。可以使用如下代码实现:
```java
List<Student> students = new ArrayList<>();
// 假设这里有很多个学生对象
Map<Integer, List<Student>> groupMap = students.stream()
.collect(Collectors.groupingBy(Student::getAge)); // 按照年龄分组
groupMap.forEach((age, list) -> {
List<Student> sortedList = list.stream()
.sorted(Comparator.comparingDouble(Student::getScore).reversed()) // 按照成绩降序排序
.collect(Collectors.toList());
System.out.println("年龄为" + age + "的学生列表:" + sortedList);
});
```
首先使用`Collectors.groupingBy`方法按照年龄对学生进行分组,得到一个年龄到学生列表的映射。然后使用`forEach`方法遍历每个分组,对每个分组内的学生列表进行按照成绩降序排序,最终输出每个年龄分组内的学生列表。
注意,这里使用了lambda表达式和方法引用简化了代码,可以根据具体情况进行调整。