使用stream 流将集合对象中的两个的属性 按key value 存入map
时间: 2024-03-14 15:45:30 浏览: 96
假设集合对象中有两个属性key和value,我们可以使用Java8的Stream API将其转换为一个Map对象。代码如下:
```java
List<MyObject> list = Arrays.asList(
new MyObject("key1", "value1"),
new MyObject("key2", "value2"),
new MyObject("key3", "value3")
);
Map<String, String> map = list.stream()
.collect(Collectors.toMap(MyObject::getKey, MyObject::getValue));
System.out.println(map);
```
其中,MyObject是具有key和value属性的实体类。在Stream的collect方法中,我们使用Collectors.toMap()方法将集合中的对象转换为一个Map对象,其中第一个参数指定了Map的key,第二个参数指定了Map的value。
运行以上代码,输出结果如下:
```
{key1=value1, key2=value2, key3=value3}
```
即成功将集合中的key和value属性存入了Map对象中。
相关问题
不能使用stream流,map中key和value互相转化,并将相同的vale值所对应的key存入到list集合中,
不使用`Stream`流的话,我们可以使用一个`HashMap`来保存值相同的键的列表,遍历原始`Map`的键值对,将相同值的键添加到对应的列表中,最后得到一个值为列表的`HashMap`。
下面是示例代码:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 1);
map.put("peach", 3);
Map<Integer, List<String>> result = new HashMap<>();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
Integer value = entry.getValue();
String key = entry.getKey();
List<String> list = result.get(value);
if (list == null) {
list = new ArrayList<>();
result.put(value, list);
}
list.add(key);
}
System.out.println(result);
}
}
```
输出结果与上面的示例相同:
```
{1=[apple, orange], 2=[banana], 3=[peach]}
```
在这个例子中,我们首先创建了一个空的`HashMap`,然后遍历原始`Map`的键值对,对于每个键值对,我们获取它的值并将它作为`HashMap`的键,然后获取对应的列表,如果列表不存在,则创建一个新的空列表并将其添加到`HashMap`中。接着将当前键添加到列表中。最后得到一个值为列表的`HashMap`。
有Map<String,String>B,用stream流使map<String,String>A中当key相同时,将A的value值与B中的value重新存入新的map中
当你有一个Map<String, String>类型的变量A,想要通过Stream API合并到另一个Map<String, String> B中,并保持如果A和B的key相同,则更新A的value为B的value,你可以这样做:
```java
Map<String, String> A = ...; // 假设这是你的原始Map A
Map<String, String> B = ...; // 另一个Map B
// 使用Stream处理A的键值对
Map<String, String> combinedMap = A.entrySet().stream()
.collect(Collectors.toMap(
entry -> entry.getKey(), // 使用Key作为新Map的键
entry -> B.getOrDefault(entry.getKey(), entry.getValue()), // 如果B中存在相同的key,取其value,否则取A的value
(oldValue, newValue) -> newValue // 如果A和B都有该key,使用B的value覆盖A的
));
// 现在combinedMap包含了A和B中key相同的部分,B的value会替换A的value
```
阅读全文