我有一个list,储存的数据是年份,Integer类型的,我想用steam流将他转换为map,key是他自己,就年份,value是这个集合中这个年份的数量
时间: 2024-02-20 22:56:44 浏览: 74
可以使用Java 8 Stream API中的Collectors.groupingBy()方法和Collectors.counting()方法来实现这个需求。具体代码实现如下:
```java
List<Integer> yearList = Arrays.asList(2001, 2002, 2002, 2003, 2003, 2003);
Map<Integer, Long> yearCountMap = yearList.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
```
这里使用了Function.identity()来作为groupingBy()方法的第一个参数,表示按照元素本身进行分组。Collectors.counting()方法则返回一个计数器,用于统计分组后每个组中元素的数量。最后得到的是一个Map<Integer, Long>,其中key为年份,value为该年份在原列表中出现的次数。
相关问题
java语言,我有一个List<Map<String,Integer>>类型的数据,我希望返回一个Map<String,Integer>对象,这个对象是集合每个map的相同key之和
你可以遍历List中的每个Map,将每个Map中的key-value对加入到一个新的Map中,如果key相同,则将对应的value相加。可以使用Java8的stream API来实现:
```
List<Map<String, Integer>> list = ...; // 初始化List<Map<String, Integer>>对象
Map<String, Integer> result = list.stream()
.flatMap(map -> map.entrySet().stream())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
Integer::sum));
```
解释一下上面的代码:首先调用`stream()`方法将List转换成Stream对象,然后使用`flatMap()`方法将每个Map转换成一个由其entry组成的Stream对象,最后使用`collect()`方法将所有entry收集成一个新的Map对象,其中`toMap()`方法的第三个参数是一个BinaryOperator对象,用于处理key相同的情况,这里使用`Integer::sum`表示将对应的value值相加。
java中我有一个list集合list集合中有多个map集合map集合中有一个key名为REMAIN_TIME现在我要根据他从小到大排序
可以使用Java 8提供的Lambda表达式和Comparator来实现对List中的Map按照REMAIN_TIME排序的功能,示例代码如下:
```java
// 假设已经有一个名为list的List<Map<String, Object>>集合对象
Collections.sort(list, Comparator.comparingInt(o -> (int) ((Map) o).get("REMAIN_TIME")));
```
上面的代码中,使用了Java 8中的Comparator.comparingInt()方法,根据Map中的REMAIN_TIME字段进行排序。其中,`(int) ((Map) o).get("REMAIN_TIME")`表示获取Map中REMAIN_TIME字段的值并转换为整型。排序后的结果保存在原List集合中。
阅读全文