java8 list对象多个属性联合作为key 生成map
时间: 2024-02-03 09:15:45 浏览: 24
可以使用Java8的Stream API来实现。
假设有一个包含多个属性的对象类`MyObject`:
```java
class MyObject {
private String property1;
private int property2;
private double property3;
// getter and setter methods
}
```
我们需要将一个`List<MyObject>`转换为一个`Map<String, MyObject>`,其中`String`是由`property1`、`property2`和`property3`联合生成的字符串作为key。
可以使用`Collectors.toMap()`方法来实现:
```java
List<MyObject> list = ...;
Map<String, MyObject> map = list.stream()
.collect(Collectors.toMap(
obj -> obj.getProperty1() + "-" + obj.getProperty2() + "-" + obj.getProperty3(),
obj -> obj
));
```
在`Collectors.toMap()`方法中,第一个参数是一个`Function`,它将每个`MyObject`对象映射为一个String作为key。在这里,我们将`property1`、`property2`和`property3`联合生成一个String,使用`-`作为分隔符。
第二个参数是一个`Function`,它将每个`MyObject`对象映射为`MyObject`本身作为value。
如果有重复的key,则会抛出`IllegalStateException`异常。可以使用`Collectors.toMap()`方法的第三个参数来指定如何解决重复的key,例如:
```java
Map<String, MyObject> map = list.stream()
.collect(Collectors.toMap(
obj -> obj.getProperty1() + "-" + obj.getProperty2() + "-" + obj.getProperty3(),
obj -> obj,
(obj1, obj2) -> obj1 // 解决重复的key,保留第一个MyObject对象
));
```