admin 管理员组

文章数量: 1184232


2024年3月6日发(作者:如何设置vlookup公式)

在Java8中将List转换为Map对象方法

假设我们有一个List,其中存储了一些Person对象,每个Person对象有一个唯一的ID和一个姓名。我们希望将该List转换为以ID为键,姓名为值的Map对象。

首先,我们需要创建一个Person类,如下所示:

```java

public class Person

private int id;

private String name;

public Person(int id, String name)

= id;

= name;

}

public int getI

return id;

}

public String getNam

return name;

}

```

接下来,我们可以通过以下步骤将List转换为Map对象:

1. 创建一个List对象,并向其中添加Person对象:

```java

List personList = new ArrayList<>(;

(new Person(1, "Alice"));

(new Person(2, "Bob"));

(new Person(3, "Charlie"));

```

2. 使用stream方法将List转换为stream对象:

```java

Stream personStream = (;

```

3. 使用collect方法将stream对象转换为Map对象:

```java

Map personMap =

t((Person::getId,

Person::getName));

```

在上述代码中,我们使用`toMap`方法,该方法接受两个参数,第一个参数指定了键的生成方式,第二个参数指定了值的生成方式。在我们的例子中,我们使用Person对象的`getId`方法作为键的生成方式,使用`getName`方法作为值的生成方式。

最后,我们可以通过以下方式来访问和打印该Map对象的内容:

```java

h((key, value) -> n(key + ":

" + value));

```

这将输出以下内容:

```

1: Alice

2: Bob

3: Charlie

```

需要注意的是,如果List中存在重复的键(也就是Person对象的ID),则会抛出`IllegalStateException`异常。这是因为在Map对象中,键必须是唯一的。为了解决这个问题,可以指定一个合适的合并函数来处理重复的键。在上述的`toMap`方法中,我们可以添加一个合并函数作为第三个参数来解决这个问题。

可以使用以下代码来处理重复键的情况:

```java

Map personMap =

.collect((Person::getId, Person::getName,

(existingValue, newValue) -> existingValue));

```

在这个例子中,我们使用`(existingValue, newValue) ->

existingValue`来指定了一个合并函数,该函数在发现重复键时将保留已存在的值。


本文标签: 对象 方法 转换 参数 使用