当前位置: 首页 > 知识库问答 >
问题:

使用Java Stream API的分层过滤

夹谷琨
2023-03-14
private  Map<Integer,Thing> thingMap = new HashMap<Integer,Thing>();
// populate thingMap
List<Thing> things = new ArrayList<Thing>();

for (Thing thing : thingMap.values()) {
    if (thing.getCategory().equals(category)) {
        if (location == null) {
            things.add(thing);
        } else if (thing.getLocation().equals(location)) {
            things.add(thing);
        }
    }
}
List<Thing> things = thingMap.entrySet()
                      .stream()
                      .filter(t -> t.getValue().getCategory().equals(category))
                      .filter(t -> 
                          location == null || 
                          t.getValue().getLocation().equals(location)
                       )
                      .map(Map.Entry::getValue)
                      .collect(Collectors.toList());
    

共有1个答案

上官斌
2023-03-14

筛选器之后链接的操作将只对谓词接受的元素执行。所以没有必要担心这个。

您还可以将这些条件连接到一个filter步骤中,就像您可以将嵌套的if语句连接到一个if语句一样,方法是使用&组合这些条件。结果是一样的。

但请注意,该循环使用条件location==null,引用的是在发布的代码段之外声明的变量,而不是thing.getLocation()==null

List<Thing> things = thingMap.values().stream()
    .filter(thing -> thing.getCategory().equals(category))
    .filter(thing -> location == null || thing.getLocation().equals(location))
    .collect(Collectors.toList());
 类似资料:
  • 最近在学Python, 看到Django 网上开源的很多项目都是在views函数里面写满逻辑代码,这相当于Java里面controller写业务代码一样,是大家都这样,还是只有我看到的这样,实际python写项目的时候要不要分层?

  • 1.【强制】 图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于 Web 层,也可以直接依赖于 Service 层,依此类推: 开放接口层: 可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行 网关安全控制、流量控制等。 终端显示层: 各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染,JS 渲染, JSP 渲染,

  • 1.【强制】 图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于 Web 层,也可以直接依赖于 Service 层,依此类推: 开放接口层: 可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行网关安全控制、流量控制等。 终端显示层: 各个端的模板渲染并执行显示的层。当前主要是 html 模板渲染,JS 渲染,移动端展示等。 Web

  • 问题内容: 我正在使用该软件包在列表视图中提供搜索功能。 现在,我还要向该视图添加分页。 我正在尝试将分页与过滤后的查询集结合起来,但是我不知道如何继续。 到目前为止,我已经尝试了以下方法: 问题答案: 要使用Django过滤器并对过滤后的结果进行分页,你可以执行以下操作: 为你的模型创建一个过滤器类: 开 每个对象都有一个包含过滤查询集的属性,如果需要,你甚至可以覆盖它。 我们将对我们的财产进行

  • 问题内容: 我有一个存储过程,该存储过程将XML文档作为参数,其结构类似于以下内容: 我的要求是“展平”此数据,以便可以将其插入临时表中并在该过程中进行进一步的操作,因此上述XML变为: 当前,这是使用SQL Server XML节点完成的: 直到我开始在该过程中抛出大量数据(即1000个以上的节点)时,此方法才有效,这时该过程停止了,并需要1至2分钟的时间来执行。我认为这可能是由于我从最低级别(

  • 问题内容: 我对用Java创建分层的tif感兴趣,以使Photoshop能够识别这些层。我能够创建多页tif,但是Photoshop无法将页面识别为图层。尽管可以使用Acrobat查看页面。有人知道Photoshop如何存储tif图层数据以及如何用Java生成吗? 谢谢。 问题答案: 我已经为TIFF ImageIO插件进行了研究,据我了解,Photoshop在TIFF中存储图层信息的方式是完全专