gpt4 book ai didi

java - Java 8 中 Haskell 的 foldr 等价物

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:27 26 4
gpt4 key购买 nike

<分区>

我们习惯了foldr在 Haskell 中你使用(例如,使用 Java 语法)a List<T>并返回所需的任何类型( <T>List<T> 等)。

例如在 Haskell 中,这个函数接受 List<Integer>并返回另一个 List<Integer>并用作累加器 a List<Integer> (只是一个例子,函数的目标无关紧要):

evens :: [Integer] -> [Integer]
evens = foldr (\ x acc -> if mod x 2 == 0 then x : acc else acc) []

现在 Java 8 已经推出并具有函数式特性,我们想要编写函数(不仅仅是 List<T> 的无重复等价物)与一种 foldr正如我们在这里使用的:

public static Double entropy (List<Double> probs){
return -probs.stream().reduce(0.0, (acc, p) -> acc + p * Math.log(p, 2));
}

使用reduce的问题是当我们采取 List<T>我们只能返回 <T> ,我们想返回一个不同的类型甚至一个集合。

有什么办法吗foldr在 Java 8 中?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com