Sream流list转map的分组
时间: 2023-10-21 18:31:11 浏览: 87
操作怎么实现?
可以使用Java 8中的stream流和Collectors.toMap()方法来实现list转map的分组操作。具体实现方法如下:
假设有一个Student类,包含name和score两个属性,现在需要将一组Student对象按照score进行分组,将同一score的Student对象放入同一个List中,最终得到一个Map<Integer, List<Student>>对象。
代码实现如下:
List<Student> students = new ArrayList<>();
// 添加一些学生对象
Map<Integer, List<Student>> map = students.stream().collect(Collectors.groupingBy(Student::getScore));
这样就可以将students中的所有学生对象按照score进行分组,得到一个Map对象,其中key是score,value是对应score的学生对象列表。
相关问题
sream + filter+map 操作list
假设有一个列表 `my_list`,下面是使用 `stream`、`filter` 和 `map` 操作的示例代码:
```java
List<Integer> my_list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> filtered_list = my_list.stream()
.filter(x -> x % 2 == 0) // 仅保留偶数
.map(x -> x * x) // 对每个偶数求平方
.collect(Collectors.toList());
```
在上面的代码中,我们首先使用 `stream` 方法将列表转换为流。然后,我们使用 `filter` 方法筛选出只有偶数的元素。接着,我们使用 `map` 方法对筛选后的每个元素进行平方操作。最后,我们使用 `collect` 方法将流转换回列表。
这段代码的输出将是一个只包含偶数元素的列表,并且每个元素都被平方了。
1. 使用Sream流实现 2. 使用正常的java代码实现 注意:不允许使用我们没学过的工具类 合并map1和map2生成新的map3。同时要求key相同时,保留map2的数据,最后把合并后的map3打印出来
使用Sream流实现:
```java
Map<String, Integer> map1 = new HashMap<>();
map1.put("a", 1);
map1.put("b", 2);
Map<String, Integer> map2 = new HashMap<>();
map2.put("b", 3);
map2.put("c", 4);
Map<String, Integer> map3 = Stream.concat(map2.entrySet().stream(), map1.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> v2));
map3.forEach((k, v) -> System.out.println(k + ": " + v));
```
使用正常的Java代码实现:
```java
Map<String, Integer> map1 = new HashMap<>();
map1.put("a", 1);
map1.put("b", 2);
Map<String, Integer> map2 = new HashMap<>();
map2.put("b", 3);
map2.put("c", 4);
Map<String, Integer> map3 = new HashMap<>(map1);
map2.forEach((k, v) -> map3.put(k, v));
map3.forEach((k, v) -> System.out.println(k + ": " + v));
```
输出结果:
```
a: 1
b: 3
c: 4
```
阅读全文