Java Stream API:IntStream 到 Map

问题描述 投票:0回答:1

任务是生成一个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 Supplierprovided: 收藏家>

Collectors.toMap 具有以下签名:

  toMap(Function<? super T, ? extends K> keyMapper,
        Function<? super T, ? extends U> valueMapper)

我用函数类型传递给这个方法参数。为什么需要供应商?

java compiler-errors java-stream functional-interface
1个回答
1
投票

一个

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()));
© www.soinside.com 2019 - 2024. All rights reserved.