如何使用流外部的值使用 Java 流 API 创建映射?

2022-09-02 03:37:14

我想初始化一个,并希望始终从流外部放置相同的值。Map<String, BigDecimal>BigDecimal

BigDecimal samePrice;
Set<String> set;

set.stream().collect(Collectors.toMap(Function.identity(), samePrice));

然而,Java抱怨如下:

类型收集器中的方法 toMap(函数,函数)不适用于参数(函数,大十进制)

为什么我不能从外部使用 BigDecimal?如果我写:

set.stream().collect(Collectors.toMap(Function.identity(), new BigDecimal()));

它会起作用,但这当然不是我想要的。


答案 1

toMap(keyMapper,valueMapper)的第二个参数(如第一个参数)是一个函数,它采用 stream 元素并返回映射的值。

在这种情况下,您希望忽略它,以便可以:

set.stream().collect(Collectors.toMap(Function.identity(), e -> samePrice));

请注意,出于同样的原因,您的第二次尝试将不起作用。


答案 2

Collectors#toMap预期两个Functions

set.stream().collect(Collectors.toMap(Function.identity(), x -> samePrice));

您可以在JavaDoc中找到几乎相同的示例

 Map<Student, Double> studentToGPA
     students.stream().collect(toMap(Functions.identity(),
                                     student -> computeGPA(student)));

推荐