如何使用从流中收集将从文件读取的字符串收集到自定义 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();