gpt4 book ai didi

java - 使用非最终变量将 Java Map.Entry 传输到 Stream

转载 作者:行者123 更新时间:2023-12-02 03:03:31 25 4
gpt4 key购买 nike

实际上这是 LeetCode #56,我使用 TreeMap 来计算结果。

代码是:

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;
}

虽然它有效,但我想知道是否有办法在流中执行此操作。

  1. Can TreeMap Map<Integer, Integer> map = new TreeMap<Integer, Integer> (tMap);直接由stream生成吗?

  2. 当我有Set<Map.Entry<Integer, Integer>> set时以及下面的 for 循环,有没有办法在流中做到这一点?

最佳答案

1- 使用 toMap还接受 Supplier<M> 的收集器方法:

Map<Integer, Integer> tMap = intervals.stream().collect(Collectors.toMap(i -> i.start, i -> i.end, (i, j) -> i > j ? i : j), () -> new TreeMap<Integer, Integer>());

2-您可以替换:

Set<Map.Entry<Integer, Integer>> set = map.entrySet();
for (Map.Entry<Integer, Integer> entry : set)
{ ...

与:

map.entrySet().stream().forEach(entry -> { ...

但是我觉得不值得。

关于java - 使用非最终变量将 Java Map.Entry 传输到 Stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42096272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com