如何使用从流中收集将从文件读取的字符串收集到自定义 class
How to collect Strings read from file into a custom class using collect from Streams
我有一个自定义class状态
public class State {
private double sum;
private int count;
public void inc(double d){
sum+=d;
count++;
}
public void add(State s){
this.sum+=s.sum;
this.count+=s.count;
}
public double average(){
return sum/count;
}
}
我有一个测试仪 class class:
import java.io.*;
import java.util.Arrays;
import java.util.function.*;
import java.util.stream.*;
import java.nio.file.*;
public class StateTest {
public static void main(String[] a) throws IOException{
BiConsumer<State,Double> acc = (s,d)->s.inc(d);
BiConsumer<State,State> comb = (s,s1)->s.add(s1);
Stream<String> ss = Files.lines(Path.of(a[0]));
//double avg = ss.mapToDouble(Double::valueOf).filter(b -> b <= 42.0f && b >= -42.0f).collect(//Dont know what to write here).average()
}
}
我想为此执行以下操作:
从文本文件中读出几行双打,将它们转换成双打,并使用.collect(Supplier, Accumulator, Combiner)
方法收集它们。
我在为州 class 编写供应商时遇到问题。我也不太清楚这种.collect()
的意思,供应是什么意思?我必须将它收集到 State 中,然后调用 State 函数的 .average()
来获取 double 的平均值。
使用.map()
代替.mapToDouble()
:
double avg = ss.map(Double::valueOf)
.filter(b -> b <= 42.0f && b >= -42.0f)
.collect(State::new, acc, comb).average();
我有一个自定义class状态
public class State {
private double sum;
private int count;
public void inc(double d){
sum+=d;
count++;
}
public void add(State s){
this.sum+=s.sum;
this.count+=s.count;
}
public double average(){
return sum/count;
}
}
我有一个测试仪 class class:
import java.io.*;
import java.util.Arrays;
import java.util.function.*;
import java.util.stream.*;
import java.nio.file.*;
public class StateTest {
public static void main(String[] a) throws IOException{
BiConsumer<State,Double> acc = (s,d)->s.inc(d);
BiConsumer<State,State> comb = (s,s1)->s.add(s1);
Stream<String> ss = Files.lines(Path.of(a[0]));
//double avg = ss.mapToDouble(Double::valueOf).filter(b -> b <= 42.0f && b >= -42.0f).collect(//Dont know what to write here).average()
}
}
我想为此执行以下操作:
从文本文件中读出几行双打,将它们转换成双打,并使用.collect(Supplier, Accumulator, Combiner)
方法收集它们。
我在为州 class 编写供应商时遇到问题。我也不太清楚这种.collect()
的意思,供应是什么意思?我必须将它收集到 State 中,然后调用 State 函数的 .average()
来获取 double 的平均值。
使用.map()
代替.mapToDouble()
:
double avg = ss.map(Double::valueOf)
.filter(b -> b <= 42.0f && b >= -42.0f)
.collect(State::new, acc, comb).average();