Java 包含2的幂的地图

Java 包含2的幂的地图,java,java-8,functional-programming,java-stream,Java,Java 8,Functional Programming,Java Stream,我正在创建一个方法,生成一个2的前20次幂的贴图。 以键作为指数,以值作为结果的映射 我正在使用JAVA8的功能特性来实现这一点。 目前我已经完成了,但是它需要我两行代码 private static Map<Integer, Integer> generatePowerMap(int base){ List<Integer> list = IntStream.rangeClosed(0,20) .map(n -> ((Double)

我正在创建一个方法,生成一个2的前20次幂的贴图。 以键作为指数,以值作为结果的映射

我正在使用JAVA8的功能特性来实现这一点。 目前我已经完成了,但是它需要我两行代码

private static Map<Integer, Integer> generatePowerMap(int base){
    List<Integer> list = IntStream.rangeClosed(0,20)
            .map(n -> ((Double) Math.pow(base, n)).intValue())
            .boxed()
            .collect(Collectors.toList());

    return IntStream.rangeClosed(0, 20)
            .boxed()
            .collect(Collectors.toMap(n-> n, list::get));
}
专用静态映射生成器电源映射(int-base){
List List=IntStream.rangeClosed(0,20)
.map(n->((Double)Math.pow(base,n)).intValue()
.boxed()
.collect(Collectors.toList());
返回IntStream.rangeClosed(0,20)
.boxed()
.collect(Collectors.toMap(n->n,list::get));
}
我想知道如何在一条线上完成它,但无法理解。
有人能帮我吗?

你的值只是指数运算,是吗

return IntStream.rangeClosed(0, 20)
        .boxed()
        .collect(Collectors.toMap(n-> n, n -> ((Double) Math.pow(base, n)).intValue()));

通过从列表中获取值来获取该值。不要。而是像在第一个流中那样计算它:
n->((Double)Math.pow(base,n)).intValue()
你是对的。我应该考虑一下。谢谢@你是不是告诉我不要那样做,因为我可以把它写得更短,还是因为这是一个坏习惯?我知道要避免副作用,但因为我没有修改列表,所以它不是副作用,不是吗?我告诉你不要这样做,因为没有理由把所有值都放在一个列表中,只是为了在第二次迭代中得到它们。尽管如此,将
double
转换为
double
,调用
intValue()
,只是将
双精度
转换为
int
,这是一种浪费性的混淆,这种混淆仍然发生在幕后。诚实地施法要干净得多:
n->(int)Math.pow(base,n)
。尽管如此,当
base
已知为2时,正如问题标题所示,您可以使用
n->1