間隔のリスト(開始順にソート)があり、それらを分割して、重複する間隔のグループのリストがあるとします。したがって、たとえば、次のようになりInterval
ます。
public class Interval {
private final int start;
private final int end;
public Interval(int start,int end){
this.start = start;
this.end = end;
}
public int getStart(){return start;}
public int getEnd(){return end;}
public String toString(){ return "("+start+","+end+")"; }
}
そしてのList<Interval>
ような:
[(0,4),(1,7),(6,10),(13,17),(20,100),(22,31),(60,65)]
次の出力が必要ですList<List<Interval>>
:
[[(0,4),(1,7),(6,10)],[(13,17)],[(20,100),(22,31),(60,65)]]
これをコーディングすることはできますが、Java 8のより機能的なアプローチを本当に楽しんでおり、Java8ストリームを使用してこれを行う慣用的な方法のようなものがあるかどうかを知りたいと思います。
提供されているコレクターの「グループ化」スタイルを見てきましたが、分類子で実際にグループ化していないため、適用されていないようです。それぞれのプロパティのみに基づいてグループを計算することはできません。個々の要素については、これまでに計算されたグループに関連して各要素のプロパティを考慮する必要があります。
確かに、関数型言語でこれを行うためのクレイジーではない方法があります(私は実際には関数型プログラマーではない誰かとして話しますが:-))。Java 8のストリームでそれを行うにはどうすればよいですか?
できません。ストリームはこの種の問題には適していません。ストリームには「前の要素」の概念がなく、任意の順序で要素を操作できます。確かにJavaでそれを行うことができ、関数型言語でそれを行うことができますが、それはストリームがあなたが慣れている関数型言語のデータ構造のように機能するという意味ではありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加