Collectors.toMap和toConcurrentMap方法请分别给我个例子
时间: 2024-03-09 07:15:00 浏览: 232
Collectiion与Map类图
3星 · 编辑精心推荐
当使用 Java 8 或更高版本的 Stream API 进行数据处理时,`Collectors.toMap()` 和 `Collectors.toConcurrentMap()` 是常用的收集器方法之一。它们都用于将流中的元素收集到一个 `Map` 中,但有一些差异。下面是它们的例子:
1. `Collectors.toMap()`
```java
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ToMapExample {
public static void main(String[] args) {
// 示例数据
Stream<String> stream = Stream.of("apple", "banana", "cherry");
// 使用 toMap() 收集器将流中的元素收集到一个 Map 中
// 将元素作为键,长度作为值
// 如果存在键冲突,则使用后面的值覆盖前面的值
// 返回的 Map 是一个普通的 HashMap
java.util.Map<String, Integer> map = stream.collect(Collectors.toMap(
e -> e, // 键映射器,使用元素本身作为键
e -> e.length() // 值映射器,使用元素的长度作为值
));
System.out.println(map); // 输出: {banana=6, cherry=6, apple=5}
}
}
```
在上述示例中,我们使用 `Collectors.toMap()` 将字符串流中的元素收集到一个 `Map` 中。将每个元素作为键,并将其长度作为值。如果存在键冲突(例如,有两个元素具有相同的长度),则后面的值将覆盖前面的值。
2. `Collectors.toConcurrentMap()`
```java
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ToConcurrentMapExample {
public static void main(String[] args) {
// 示例数据
Stream<String> stream = Stream.of("apple", "banana", "cherry");
// 使用 toConcurrentMap() 收集器将流中的元素收集到一个 ConcurrentMap 中
// 将元素作为键,长度作为值
// 如果存在键冲突,则使用后面的值覆盖前面的值
// 返回的 Map 是一个 ConcurrentHashMap
java.util.concurrent.ConcurrentMap<String, Integer> map = stream.collect(Collectors.toConcurrentMap(
e -> e, // 键映射器,使用元素本身作为键
e -> e.length() // 值映射器,使用元素的长度作为值
));
System.out.println(map); // 输出: {banana=6, cherry=6, apple=5}
}
}
```
在上述示例中,我们使用 `Collectors.toConcurrentMap()` 将字符串流中的元素收集到一个 `ConcurrentMap` 中。其余部分与前面的示例相似,不同之处在于返回的 `Map` 是一个线程安全的 `ConcurrentHashMap`。
这些示例演示了如何使用 `Collectors.toMap()` 和 `Collectors.toConcurrentMap()` 方法将流中的元素收集到一个 `Map` 中。您可以根据实际需求进行调整和扩展。
阅读全文