stream流list转map 过滤key不为空的
时间: 2024-11-06 11:14:39 浏览: 101
在Java中,如果你有一个List,其中包含Map的键值对,你可以通过Stream API将其转换成一个新的Map,只保留那些键非空的元素。以下是简单的步骤:
```java
import java.util.*;
import java.util.stream.*;
List<Map.Entry<String, String>> entries = ... // 假设这是你的列表
Map<String, String> filteredMap = entries.stream()
.filter(entry -> entry.getKey() != null) // 过滤掉键为null的项
.collect(Collectors.toMap(
Map.Entry::getKey, // 使用键作为新的Map的key
Map.Entry::getValue, // 使用值作为新的Map的value
(oldValue, newValue) -> oldValue // 如果键已经存在,可以选择保留旧值(这里使用旧值)
));
```
这个代码片段首先创建了一个流(Stream),然后应用`filter`操作过滤掉键为null的项。最后,使用`collect`方法将剩下的条目收集到一个新的Map中。
相关问题
stream流list转map重复key
这种情况需要使用Java 8中的新特性,例如使用Map的merge方法。你可以将每个stream流list中的元素作为key,将其出现次数作为value,然后使用merge方法将重复的key的value相加。以下是示例代码:
```
List<String> list = Arrays.asList("apple", "banana", "cherry", "apple");
Map<String, Integer> map = new HashMap<>();
list.stream().forEach(str -> map.merge(str, 1, Integer::sum));
System.out.println(map);
```
输出结果为{banana=1, cherry=1, apple=2}。
stream流list转map重复key 取最大值
可以使用Java 8的Stream API,先将List转换为Map,然后使用merge方法解决重复key的问题,取最大值。示例代码如下:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Item> itemList = Arrays.asList(
new Item("key1", 10),
new Item("key2", 20),
new Item("key3", 30),
new Item("key1", 5),
new Item("key2", 15)
);
Map<String, Integer> resultMap = itemList.stream()
.collect(Collectors.toMap(
Item::getKey, // key映射函数
Item::getValue, // value映射函数
Integer::max // 解决重复key的方法,取最大值
));
System.out.println(resultMap); // 输出:{key1=10, key2=20, key3=30}
}
static class Item {
private String key;
private int value;
public Item(String key, int value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public int getValue() {
return value;
}
}
}
```
阅读全文
相关推荐
















