間隔の一覧(開始順)があり、それらを分割して、間隔の重複グループの一覧があるとします。したがって、たとえば、などInterval
で:Java 8パーティションは、前の要素を含む条件でグループ化して一覧表示します。
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)]]
私はこれをコーディングすることができますが、I Java 8のより機能的なアプローチを本当に楽しんでいて、Java 8ストリームを使ってこれを行う慣習的な方法があるかどうかを知りたい。
私は「」の「グループ化」スタイルを見てきましたが、実際には分類器でグループ化していないので適用されないようです。個々の要素のプロパティでは、これまでに計算されたグループに関連して各要素のプロパティを考慮する必要があります。
確かに機能的な言語でこれを行うための非クレイジーな方法があります(私は本当に機能的プログラマーではない人として話しますが、 - ))。 Java 8のストリームでどうすればいいですか?
「this.start = end;」はあなたが望むものではないと思います。しかし、 'final'変数を使用してエラーがコンパイラによって直ちに検出されるようにするのは良いことです。 – Holger
ところで、入力が次のようなときの出力はどうでしょうか?[((60,65)、(22,31)、(20,100)] '? 3つの間隔はすべて一緒にマージする必要がありますか?言い換えれば、入力間隔の順番が結果を変えるかもしれませんか? –
@ Tagir Valeev:質問の前提条件(最初の文で)は、要素が開始点によってソートされるということです。任意のソリューションにソートステップを追加することで、その要件を緩和するのは簡単です。 – Holger