実際にはこれはLeetCode#56で、結果を計算するためにTreeMapを使用しています。Java Map.Entryを非最終変数でストリームに転送
コードは次のとおりです。
public List<Interval> merge(List<Interval> intervals) {
Map<Integer, Integer> tMap = intervals.stream().collect(Collectors.toMap(i -> i.start, i -> i.end, (i, j) -> i > j ? i : j));
Map<Integer, Integer> map = new TreeMap<Integer, Integer> (tMap);
List<Interval> res = new ArrayList<Interval>();
int left = Integer.MAX_VALUE, right = Integer.MAX_VALUE, tmpLeft = -1, tmpRight = -1;
Set<Map.Entry<Integer, Integer>> set = map.entrySet();
for (Map.Entry<Integer, Integer> entry : set)
{
if (Integer.MAX_VALUE == left && Integer.MAX_VALUE == right)
{
left = entry.getKey();
right = entry.getValue();
}
else
{
tmpLeft = entry.getKey();
tmpRight = entry.getValue();
if(right < tmpLeft)
{
res.add(new Interval(left, right));
left = tmpLeft;
}
right = right > tmpRight ? right : tmpRight;
}
}
if (Integer.MAX_VALUE != left && Integer.MAX_VALUE != right)
res.add(new Interval(left, right));
return res;
}
それは動作しますが、ストリームでこれを行うための方法があるならば、私は思ったんだけど。
Can TreeMap
Map<Integer, Integer> map = new TreeMap<Integer, Integer> (tMap);
はストリームで直接生成されますか?私は
Set<Map.Entry<Integer, Integer>> set
と以下のループを持っていますが、それをストリームで行う方法はありますか?
'(i、j) - > i> j? i:j'は 'Math :: max'と同じです – 4castle