Java Stream:在 reduce() 操作中解析字符串
Java Stream: Parsing Strings inside the reduce() operation
我有一个字符串流:
Stream<String> st = Arrays.stream(new String[]{"10", "20", "30", "40", "50"});
我想将它们转换为整数并使用 reduce
方法求和。我正在使用以下格式的 reduce:
int result = st.reduce(0, (a, b) -> a + Integer.parseInt(b));
我收到这个错误:
no suitable method found for reduce(int, (a, b) -> a + [...]nt(b))
关于如何重写 reduce 方法以使其工作的任何提示?
您需要提供一个 combiner 函数作为第三个参数才能使其工作:
int sum = Arrays.stream(new String[]{"10", "20", "30", "40", "50"})
.reduce(0, (a, b)-> a + Integer.parseInt(b), Integer::sum);
否则你会得到不同风格的 reduce()
,它能够产生与流中元素类型相同类型的结果。
而且你不需要reduce()
,更好的方法:
int sum = Stream.of("10", "20", "30", "40", "50")
.mapToInt(Integer::parseInt)
.sum();
我不使用 reduce()
,而是将其分为两个步骤:将字符串转换为整数(作为 IntStream
),然后对它们求和:
Stream.of("10", "20", "30", "40", "50").mapToInt(Integer::parseInt).sum()
I want to convert them to integer and sum them up using the reduce method. I am using reduce in the following format:
当通过 Integer::parseInt
转换为 IntStream
时,reduce
方法采用 int
起始值和 IntBinaryOperator
的形式。所以以下将起作用。
String[] data ={"10", "20", "30", "40", "50"};
int sum = Arrays.stream(data)
.mapToInt(Integer::parseInt).reduce(0, (a,b)->(a+b));
System.out.println(sum);
打印
150
为了您的启迪(和未来的需求),您可以这样做。
int sum = Arrays.stream(data).mapToInt(Integer::parseInt).sum();
System.out.println(sum);
打印
150
我有一个字符串流:
Stream<String> st = Arrays.stream(new String[]{"10", "20", "30", "40", "50"});
我想将它们转换为整数并使用 reduce
方法求和。我正在使用以下格式的 reduce:
int result = st.reduce(0, (a, b) -> a + Integer.parseInt(b));
我收到这个错误:
no suitable method found for reduce(int, (a, b) -> a + [...]nt(b))
关于如何重写 reduce 方法以使其工作的任何提示?
您需要提供一个 combiner 函数作为第三个参数才能使其工作:
int sum = Arrays.stream(new String[]{"10", "20", "30", "40", "50"})
.reduce(0, (a, b)-> a + Integer.parseInt(b), Integer::sum);
否则你会得到不同风格的 reduce()
,它能够产生与流中元素类型相同类型的结果。
而且你不需要reduce()
,更好的方法:
int sum = Stream.of("10", "20", "30", "40", "50")
.mapToInt(Integer::parseInt)
.sum();
我不使用 reduce()
,而是将其分为两个步骤:将字符串转换为整数(作为 IntStream
),然后对它们求和:
Stream.of("10", "20", "30", "40", "50").mapToInt(Integer::parseInt).sum()
I want to convert them to integer and sum them up using the reduce method. I am using reduce in the following format:
当通过 Integer::parseInt
转换为 IntStream
时,reduce
方法采用 int
起始值和 IntBinaryOperator
的形式。所以以下将起作用。
String[] data ={"10", "20", "30", "40", "50"};
int sum = Arrays.stream(data)
.mapToInt(Integer::parseInt).reduce(0, (a,b)->(a+b));
System.out.println(sum);
打印
150
为了您的启迪(和未来的需求),您可以这样做。
int sum = Arrays.stream(data).mapToInt(Integer::parseInt).sum();
System.out.println(sum);
打印
150