gpt4 book ai didi

java - 执行 map-reduce 操作的通用方法。 (Java-8)

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

如何在 Java 8 中使用泛型参数重载函数?

public class Test<T> {

List<T> list = new ArrayList<>();

public int sum(Function<T, Integer> function) {
return list.stream().map(function).reduce(Integer::sum).get();
}


public double sum(Function<T, Double> function) {
return list.stream().map(function).reduce(Double::sum).get();
}
}

Error: java: name clash: sum(java.util.function.Function<T,java.lang.Double>) and sum(java.util.function.Function<T,java.lang.Integer>) have the same erasure

最佳答案

Benji Weber once wrote of a way to circumvent this.您需要做的是定义扩展参数类型的自定义功能接口(interface):

public class Test<T> {

List<T> list = new ArrayList<>();

@FunctionalInterface
public interface ToIntFunction extends Function<T, Integer>{}
public int sum(ToIntegerFunction function) {
return list.stream().map(function).reduce(Integer::sum).get();
}


@FunctionalInterface
public interface ToDoubleFunction extends Function<T, Double>{}
public double sum(ToDoubleFunction function) {
return list.stream().map(function).reduce(Double::sum).get();
}
}

另一种方法是改用 java.util.function.ToIntFunction 和 java.util.function.ToDoubleFunction:

public class Test<T> {

List<T> list = new ArrayList<>();

@FunctionalInterface
public int sum(ToIntFunction function) {
return list.stream().mapToInt(function).sum();
}

public double sum(ToDoubleFunction function) {
return list.stream().mapToDouble(function).sum();
}
}

关于java - 执行 map-reduce 操作的通用方法。 (Java-8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30826674/

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