class MyListOfNumbers>
{
public T sum()
{
return list_of_Ts.stream()
.sum();
}
}
关于T,我一无所知,只是它是一个数字,可以与“兄弟姐妹”(需要对东西进行排序…)进行比较.
显然,这是行不通的,并且不会以旧的Java方式(即循环)运行,因为据我所知,您根本无法做到T x = 0.
我认为这两种方法都不起作用,原因是相同的,并且T没有实现总和.此外,我读到它在空集上不起作用.
class MyListOfNumbers>
{
public T sum()
{
return list_of_Ts.stream()
.reduce(0, T::sum);
}
}
那该怎么办呢?
编辑:请考虑T可以是从Byte到BigDecimal的任何值,并将其强制为整数可能意味着丢失数据
解决方法:
传递累加器函数和标识值作为参数:
public T sum(T identity, BinaryOperator accumulator) {
return list_of_Ts.stream().reduce(identity, accumulator);
}
请注意,如果您希望避免在实际调用时传递这些参数,则可以创建静态方法来进行调用:
public static int intSum(MyListOfNumbers list) {
return list.sum(0, (a, b) -> a + b);
}
public static double doubleSum(MyListOfNumbers list) {
return list.sum(0, (a, b) -> a + b);
}
// etc.
标签:java-8,generics,java,lambda
来源: https://codeday.me/bug/20191111/2018949.html