使用stream 流将集合对象中的两个的属性 按key value 存入map
时间: 2024-03-14 22:45:30 浏览: 87
假设集合对象中有两个属性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`。
java代码中,有一个map集合,map的key是string,value是对象,对象有属性id,num,写出代码计算map集合中的num总和
要计算Map集合中对象的num属性的总和,可以使用Java的Stream API来实现。以下是示例代码:
```java
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, MyObject> map = new HashMap<>();
// 假设已经将数据存入了map集合中
int sum = map.values().stream()
.mapToInt(MyObject::getNum)
.sum();
System.out.println("num属性的总和:" + sum);
}
}
class MyObject {
private String id;
private int num;
// 省略构造函数和其他方法
public int getNum() {
return num;
}
}
```
在上述代码中,我们使用了Java 8引入的Stream API。首先,我们通过`map.values()`获取Map集合中所有的值,然后使用`stream()`转换为流。接着,使用`mapToInt`将流中的对象映射为其num属性的值,并将其转换为IntStream。最后,使用`sum()`方法计算所有num属性值的总和。
请注意,这只是一个示例代码,你需要根据实际情况修改Map集合的类型、对象的属性以及数据的获取方式。
阅读全文