被Java8 Collectors.toMap混淆
问题内容:
我有一个如下所示的集合,我想过滤掉除月末以外的所有内容。
2010-01-01=2100.00,
2010-01-31=2108.74,
2010-02-01=2208.74,
2010-02-28=2217.92,
2010-03-01=2317.92,
2010-03-31=2327.57,
2010-04-01=2427.57,
2010-04-30=2437.67,
2010-05-01=2537.67,
2010-05-31=2548.22,
2010-06-01=2648.22,
2010-06-30=2659.24,
2010-07-01=2759.24,
2010-07-31=2770.72,
2010-08-01=2870.72,
2010-08-31=2882.66,
2010-09-01=2982.66,
2010-09-30=2995.07,
2010-10-01=3095.07,
2010-10-31=3107.94,
2010-11-01=3207.94,
2010-11-30=3221.29
我有以下过滤条件。frequency.getEnd
返回LocalDate
给定月份的匹配项LocalDate
。
.filter(p -> frequency.getEnd(p.getKey()) == p.getKey())
所以现在我想我必须将此过滤后的流转换回地图。我想我使用收集器来做到这一点。因此,我添加:
.collect(Collectors.toMap(/* HUH? */));
但是我不知道该怎么办Collectors.toMap
。阅读示例会让我感到困惑。这是我当前的代码,显然不起作用。
TreeMap<LocalDate, BigDecimal> values = values.entrySet()
.stream()
.filter(p -> frequency.getEnd(p.getKey()) == p.getKey())
.collect(Collectors.toMap(/* HUH? */));
问题答案:
除了前面的答案外,请注意,如果您不需要保留原始地图,则可以在不使用Stream API的情况下就地执行此类过滤:
values.keySet().removeIf(k -> !frequency.getEnd(k).equals(k));