gpt4 book ai didi

scala - 从 Java #map 调用 Scala Monad

转载 作者:行者123 更新时间:2023-12-04 10:19:44 25 4
gpt4 key购买 nike

我有一个 scala.collection.immutable.List 的实例我想调用 map方法,但来自Java。

我需要提供一个 CanBuildFrom .

我注意到很多 Scala 集合伴随对象包含隐式 CanBuildFrom实例,但我不知道我需要使用哪一个。

这是我的Java代码:

    Function1<WeatherData, BigDecimal> mapper = new AbstractFunction1<WeatherData, BigDecimal>(){
@Override
public BigDecimal apply(WeatherData data) {
return data.getTemps().reduce(adder).divide(new BigDecimal(data.getTemps().size()));
}
};

scala.collection.immutable.List<WeatherData> data = ...

data.map(mapper, ???);

我应该传递什么作为 CanBuildFrom(第二个参数?)

PS 使用 Scala 2.10-M5

最佳答案

您实际上可以在 Java 中获得正确的类型而无需大惊小怪:

import scala.collection.Traversable;
import scala.collection.generic.CanBuildFrom;
import scala.collection.immutable.List;
import scala.collection.mutable.Builder;
import scala.runtime.AbstractFunction1;

public class ScalaMapTest {
public static List<Integer> parseInts(List<String> xs) {
final CanBuildFrom<List<?>, Integer, List<Integer>> builder =
List.<Integer>canBuildFrom();

return xs.map(
new AbstractFunction1<String, Integer>() {
public Integer apply(String s) {
return Integer.parseInt(s);
}
},
new CanBuildFrom<Traversable<String>, Integer, List<Integer>>() {
public Builder<Integer, List<Integer>> apply() {
return builder.apply();
}

public Builder<Integer, List<Integer>> apply(Traversable<String> from) {
return builder.apply(from.toList());
}
}
);
}
}

它仍然像罪一样丑陋,但它有效。问题是 CanBuildFrom 上的通配符您从 canBuildFrom 获得 List上的方法对象,但幸运的是您可以创建自己的 CanBuildFrom具有正确类型的包装器。

关于scala - 从 Java #map 调用 Scala Monad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11678756/

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