java - Java 流从地图中获取列表
问题描述
我有以下变量声明
Map<EventType<? extends Event>, Map<EventSource, List<EventHandler<? super Event>>>> eventHandlers;
使用 java 流我想先在 eventType 上过滤这个地图,然后在 eventSource 上过滤,最后是一个 List。
我该如何使用java流来做到这一点,我尝试了几种不同的方法但没有成功。到目前为止我的实现是
List <Object> something = eventHandlers.entrySet().stream().filter(entry
-> entry.getKey() == event.eventType || event.eventType.isSubType(entry.getKey())
).map(Map.Entry::getValue).collect(Collectors.toList());
但我只是以一个结束List<Map<EventSource, List<EventHandler<? super Event>>>>
我如何实现这一点,任何帮助或指示将不胜感激。
非常感谢
解决方案
扩展我的评论,这样的东西(没有编译器编写,所以可能会有一些错误)应该可以工作:
List<EventHandler<? super Event>> output = eventHandlers
.entrySet()
.stream()
.filter(entry -> entry.getKey() == event.eventType || event.eventType.isSubType(entry.getKey()))
.map(Map.Entry::getValue)
.map(Map::entrySet)
.flatMap(Set::stream)
.filter(entry -> entry.getKey() == event.eventSource) // ? Modify the filter on event source according to your needs
.map(Map.Entry::getValue)
.flatMap(List::stream)
.collect(Collectors.toList());
请注意,您可以缩短一点,使用 lambdas 而不是函数引用:
List<EventHandler<? super Event>> output = eventHandlers
.entrySet()
.stream()
.filter(entry -> entry.getKey() == event.eventType || event.eventType.isSubType(entry.getKey()))
.flatMap(entry -> entry.getValue().entrySet().stream())
.filter(entry -> entry.getKey() == event.eventSource) // ? Modify the filter on event source according to your needs
.flatMap(entry -> entry.getValue().stream())
.collect(Collectors.toList());
推荐阅读
- drupal - 5 次尝试失败后 Drupal 需要多长时间才能解除对用户的阻止?
- javascript - javascript 条件导入在 Firefox 中不起作用
- ruby-on-rails - 显示来自搜索查询的额外数据
- html - 如何在没有危险的 SetInnerHTML 的情况下在 React 中呈现 HTML 实体?
- javascript - 问:对齐标题“高”迫使图形变小,如何保持图形宽度?
- mps - SWITCH 宏的 initValue
- android - 根据 REST 服务返回的值填充 Spinner
- php - 将较低的数字从行导出到 csv
- sql - 增量计数
- opengl-es - GLSL:为什么这个bloomEffect 和gloomEffect 代码只输出黑白图像?