任务是生成一个Map,其中键表示为0到10范围内的整数,值表示为字符串值,并与键值连接。
例如,
{ key = 1, value = "client_1"; key = 2, value = "client_2" .... }
我试着这样做如下所示:
Map<Integer, String> clients = IntStream.range(1, 10).collect(Collectors.toMap(Function.identity(), new Function<Integer, String>() {
@Override
public String apply(Integer integer) {
return new StringBuilder().append("client_").append(integer).toString();
}
}));
在 lambda 中:
Map<Integer, String> clients = IntStream.range(1, 10).collect(Collectors.toMap(Function.identity(),
integer -> new StringBuilder().append("client_").append(integer).toString()));
但是 IDEA 将此标记为错误并通知,required type is Supplier
Collectors.toMap 具有以下签名:
toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper)
我用函数类型传递给这个方法参数。为什么需要供应商?
一个
IntStream
产生一个int
流,而不是java.lang.Integer
流,因此编译器错误。一种解决方案是将蒸汽装箱以将它们转换为Integer
s:
Map<Integer, String> clients =
IntStream.range(1, 10).
.boxed() // Here!
.collect(
Collectors.toMap(Function.identity(),
i-> new StringBuilder().append("client_").append(i).toString()));