最近、データパーサーをJavaのストリームに再実装しようとしていますが、特定のことを行う方法がわかりません:
timeStamp を持つオブジェクト A を考えてみましょう。さまざまな A オブジェクトで構成されているオブジェクト B を考えてみましょう。オブジェクト B の時間範囲を示すいくつかのメトリックを考えてみましょう。
私が今持っているのは、オブジェクトAのリストを通過する状態を持つメソッドであり、最後のオブジェクトBに収まる場合はそこに移動し、そうでない場合は新しいBインスタンスを作成し、そこにオブジェクトAを配置し始めます。
これをストリームの方法で行いたい
オブジェクト A の全リストを取り、それをストリームにします。ここで、「チャンク」を作成し、それらをオブジェクト B に蓄積する関数を理解する必要があります。どうすればよいですか?
ありがとう
編集:
A と B は複雑ですが、簡略化したバージョンをここに投稿しようと思います。
class A {
private final long time;
private A(long time) {
this.time = time;
}
long getTime() {
return time;
}
}
class B {
// not important, build from "full" temporaryB class
// result of accumulation
}
class TemporaryB {
private final long startingTime;
private int counter;
public TemporaryB(A a) {
this.startingTime = a.getTime();
}
boolean fits(A a) {
return a.getTime() - startingTime < THRESHOLD;
}
void add(A a) {
counter++;
}
}
class Accumulator {
private List<B> accumulatedB;
private TemporaryBParameters temporaryBParameters
public void addA(A a) {
if(temporaryBParameters.fits(a)) {
temporaryBParameters.add(a)
} else {
accumulateB.add(new B(temporaryBParameters)
temporaryBParameters = new TemporaryBParameters(a)
}
}
}
わかりましたので、これは非常に単純化された方法であり、今これを行う方法です。私はそれが気に入りません。それは醜いです。