gpt4 book ai didi

java - 如何在 Java 中实现列表折叠

转载 作者:IT老高 更新时间:2023-10-28 20:38:25 25 4
gpt4 key购买 nike

我有一个 List 并希望将其缩减为单个值(函数式编程术语“折叠”,Ruby 术语 inject),例如

Arrays.asList("a", "b", "c") ... fold ... "a,b,c"

由于我感染了函数式编程思想 (Scala),因此我正在寻找一种比它更简单/更短的编码方式

sb = new StringBuilder
for ... {
append ...
}
sb.toString

最佳答案

回答你原来的问题:

public static <A, B> A fold(F<A, F<B, A>> f, A z, Iterable<B> xs)
{ A p = z;
for (B x : xs)
p = f.f(p).f(x);
return p; }

F 看起来像这样:

public interface F<A, B> { public B f(A a); }

正如 dfa 建议的那样,Functional Java是否已实现,等等。

示例 1:

import fj.F;
import static fj.data.List.list;
import static fj.pre.Monoid.stringMonoid;
import static fj.Function.flip;
import static fj.Function.compose;

F<String, F<String, String>> sum = stringMonoid.sum();
String abc = list("a", "b", "c").foldLeft1(compose(sum, flip(sum).f(",")));

示例 2:

import static fj.data.List.list;
import static fj.pre.Monoid.stringMonoid;
...
String abc = stringMonoid.join(list("a", "b", "c"), ",");

示例 3:

import static fj.data.Stream.fromString;
import static fj.data.Stream.asString;
...
String abc = asString(fromString("abc").intersperse(','));

关于java - 如何在 Java 中实现列表折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/950751/

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