返回常量值的java.util.stream.Collectors.toMap()的值函数

时间:2019-05-18 15:49:23

标签: java function stream java-stream

我正在尝试创建一个Map,键的值从1到N,并且每个kesys的值都是恒定的-

SELECT new MyDTO(o.prop1, o.prop2) FROM Object o

这种结构给我错误。

2 个答案:

答案 0 :(得分:1)

IntStream.rangeClosed()返回IntStream而不返回Stream<Integer>IntStreamint s的原始流。要将IntStream转换为Stream<Integer>,您需要在流中调用IntStream.boxed()

private Map<Integer, Integer> getInitialDistMap(int N) {
    Function<Integer, Integer> constant = x -> Integer.MAX_VALUE;
    return IntStream.rangeClosed(1, N).boxed()
            .collect(Collectors.toMap(Function.identity(), constant));
}

答案 1 :(得分:1)

静态IntStream rangeClosed(int startInclusive,int endInclusive)

rangeClosed将返回IntStreamIntStream上唯一可用的collect方法是

<R> R collect(Supplier<R> supplier,ObjIntConsumer<R> accumulator, BiConsumer<R,R> combiner)

因此,使用boxed()返回Stream<Integers>整数流,然后收集到Map

Stream<Integer> boxed()
  

返回一个包含此流元素的流,每个元素都装在整数中。

解决方案

IntStream.rangeClosed(1, N).boxed().collect(Collectors.toMap(Function.identity(), constant));