java stream 多个filter_如何在Java Stream上应用多个过滤器?

我必须通过一个映射过滤一个对象集合,该映射包含对象字段名称和字段值的键值对。我试图通过stream()。filter()应用所有过滤器。

对象实际上是JSON,因此Map保留了其变量的名称以及它们必须包含的值才能被接受,但是出于简单性的原因,并且由于它与问题无关,因此我编写了一个简单的Testclass来模拟行为:

public class TestObject {

private int property1;

private int property2;

private int property3;

public TestObject(int property1, int property2, int property3) {

this.property1 = property1;

this.property2 = property2;

this.property3 = property3;

}

public int getProperty(int key) {

switch(key) {

case 1: return property1;

case 2: return property2;

default: return property3;

}

}

}

到目前为止我尝试过的是:

public static void main(String[] args) {

List list = new ArrayList<>();

Map filterMap = new HashMap<>();

list.add(new TestObject(1, 2, 3));

list.add(new TestObject(1, 2, 4));

list.add(new TestObject(1, 4, 3));

filterMap.put(3, 3); //Filter property3 == 3

filterMap.put(2, 2); //Filter property2 == 2

//Does not apply the result

filterMap.forEach((key, value) -> list.stream()

.filter(testObject -> testObject.getProperty(key) == value)

.collect(Collectors.toList())

);

/* Gives error: boolean can not be converted to void

list = list.stream()

.filter(testObject -> filterMap.forEach((key, value) -> testObject.getProperty(key) == value))

.collect(Collectors.toList()

);

*/

//Printing result

list.forEach(obj -> System.out.println(obj.getProperty(1) + " " + obj.getProperty(2) + " " + obj.getProperty(3)));

}

我尝试将Map的forEach放在首位,并将Collection的流放在首位,但是两种解决方案均无法按预期工作。此示例的期望输出将仅是打印值为property1

= 1,property2 = 2和property3 = 3的对象。

我如何正确地应用所有过滤器,就像您在代码中使用固定数量的过滤器一个接一个地放置它们一样?

使用已知数量的过滤器:

list.stream().filter(...).filter(...)

编辑:

Sweeper在回答中很好地总结了我的问题,因此在这里再次为了澄清(可能是将来的读者):我想保留所有满足所有过滤条件的对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

没有数学何来计算机:论计算机起源的数学思想

来源&#xff1a;无数学 无计算机人类的历史可以看做一部关于解放的历史。也有这样的说法&#xff0c;懒惰是人类进步的动力。为了偷懒&#xff0c;人类不断的做着各种努力&#xff0c;发明了各种机器工具&#xff0c;将自己从繁重的劳动解放出来&#xff0c;另一方面&#xf…

python和python stub文件类型的区别_python – 如何告诉mypy包含stubfile

我正在玩mypy(版本&#xff1a;0.630),我很难让它看到我的存根文件.谁能告诉我这里有什么问题&#xff1a;我的目录结构如下所示&#xff1a;├── caesar.py└── stubs└── caesar.pyicaesar.py包含一些有效的python代码. caesar.pyi包含单词bugger.我希望当我运行mypy时…

复杂控件

1.自定义标题栏 1.1引入布局 步骤&#xff1a; 1&#xff09;写好布局 2&#xff09;在activity布局里面直接引用该布局 核心代码&#xff1a; 注意&#xff1a;如何将系统自带的标题栏去掉&#xff1a; 方法一&#xff1a;&#xff08;不一定灵&#xff09; 方法二&#xff1a…

​Arm芯片的新革命在缓缓上演

来源&#xff1a;内容由半导体行业观察&#xff08;ID&#xff1a;icbank&#xff09;编译自「seekingalpha」&#xff0c;谢谢。因为苹果将发布使用其自研Arm芯片的Mac电脑&#xff0c;为此我认为基于ARM的芯片将蚕食 Intel和AMD的核心业务。这其实已经发生了&#xff0c;但是…

web移动端开发经验总结

整理web移动端开发经验&#xff0c;部分内容借鉴于网上的博文。 1、meta标签 <meta name"viewport" content"widthdevice-width,initial-scale1.0,maximum-scale1.0,user-scalable0;" /><!-- width可视宽度&#xff0c;initial-scale初始化缩放比…

追踪“MATLAB被禁”:我们如何做出卡别人脖子的软件?

作者 | 包云岗&#xff08;中国科学院计算技术研究所研究员&#xff09;编辑 | 宗华排版 | 华园导 读最近&#xff0c;哈工大、哈工程被禁用工科神器Matlab一事引发持续讨论。6月19日&#xff0c;中科院计算所研究员包云岗在微博上分享了他在“CCF YOCSEF杭州Matlab被禁之特别…

oracle 截取小数点_处理小数点位数的Oracle函数

Oracle函数可以实现许多的功能&#xff0c;下面为您介绍的Oracle函数用于处理小数点位数&#xff0c;如果您对Oracle函数数据库感兴趣的话&#xff0c;不妨一看。关于处理小数点位数的几个oracle函数()&#xff1a;1. 取四舍五入的几位小数select round(1.2345, 3) from dual;结…

拿下赌场新客户,但马斯克“超级隧道”何时才能颠覆地面交通?

来源&#xff1a;脑极体埃隆马斯克那家非常“Boring”的隧道公司&#xff0c;最近生意又热络了起来。据媒体报道&#xff0c;在5月份完成美国拉斯维加斯会议中心的两条地下隧道之后&#xff0c;埃隆马斯克的隧道公司&#xff08;Boring Company&#xff09;又接到了当地两家大型…

NOIP2016天天爱跑步 题解报告【lca+树上统计(桶)】

题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做《天天爱跑步》的游戏。天天爱跑步是一个养成类游戏,需要玩家每天按时上线,完成打卡任务。 这个游戏的地图可以看作一一棵包含 nn个结点和 n-1n−1条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达。树…

人工智能发展简史

文章来源&#xff1a;人工智能和大数据 &#xff08;ID&#xff1a;AIANDBIGDATA&#xff09;人工智能是在1956年作为一门新兴学科的名称正式提出的&#xff0c;自此之后&#xff0c;它已经取得了惊人的成就&#xff0c;获得了迅速的发展&#xff0c;它的发展历史&#xff0c;可…

程序媛计划——python数据库

#实例&#xff1a;用数据库存储日记&#xff0c;实现日记本功能 #流程 #创建数据库 1 #coding:utf-8 2 import sqlite3 3 connectsqlite3.connect(test.db) 4 connect.close() #效果 #用sqlite3模块对数据库进行操作 1 #coding:utf-82 import sqlite33 #创建数据库4 connectsql…

国产半导体路在何方,瓦森纳与光刻机你了解多少

来源&#xff1a;PConline光刻机&#xff08;Mask Aligner&#xff09;是制造微机电、光电、二极体大规模集成电路的重要设备。一台光刻机主要包括了曝光系统和对准系统两个部分。光刻机能够利用曝光系统发射出的紫外线通过模版去除晶圆表面的保护膜&#xff0c;将器件或电路结…

linux实验总结及心得_安全实验室 | 内网渗透—Linux权限维持技巧总结

在上一篇文章中我们介绍了内网渗透中Windows环境下进行权限维持(点击阅读)的方式&#xff0c;本期我们将视角集中在Linux系统中继续对内网渗透中的权限维持方式进行探索。Linux也是在内网渗透中很常见的操作系统&#xff0c;但是其内部实现方式却与Windows有着本质的区别。我们…

特殊乘法(字符串循环的结束标志)

#include<iostream>using namespace std;int main(){ char s1[11]; char s2[11]; while (cin >> s1 >> s2) { int ans 0; for (int i 0; s1[i] ! 0; i) //字符串判断标志 { for (int j 0; s2[j] ! 0; j) { ans (s1[i] - 0)*(s2[j] - 0); } } cout <&l…

深度学习模型并非“越大越好”,它可能引起气候变化问题

来源丨Forbes作者丨Rob Toews编译丨科技行者和当今的深度学习方法相比&#xff0c;我们大脑的效率高得不可思议。它们只有几磅重&#xff0c;大概只需要20瓦左右的能量消耗&#xff0c;这个能耗只能够给昏暗的灯泡供电。然而&#xff0c;它们代表了已知宇宙中最强大的智力形式。…

python 声音基频f0_音高和基频(Pitch and F0)

音高(Pitch)和基频(F0)是两个非常接近的概念&#xff0c;尽管它们有所不同&#xff0c;但通常并不区分。音高和基频的关系最早在音乐界被发现&#xff0c;通常认为&#xff0c;音高增高八度音程相当于基频翻倍。在1000Hz以下&#xff0c;基频翻倍略小于音高的八度音程&#xff…

datagrid 完整dom结构

<!-- datagrid的最外层容器&#xff0c;可以使用$(target).datagrid(getPanel)或者$.data(target,datagrid).panel得到这个DOM对象&#xff0c;这个DOM上其实承载了panel组件--> <div class"panel datagrid"> <!-- datagrid的标题区域容器&…

dismiss ios pop效果_iOS 动画框架pop使用方法

pop支持4种动画类型&#xff1a;弹簧动画效果、衰减动画效果、基本动画效果和自定义动画效果。弹簧动画效果1.效果图如下:2.控制器代码如下,首先用pod安装导入pop框架:#import "ViewController.h"#import interface ViewController ()endimplementation ViewControll…

万亿新基建,AI“芯”机遇在哪?| CCF-GAIR 2020

新基建中的5G、AI和智能计算等新一代高端芯片属于新赛道&#xff0c;需要构建全新生态。”来源&#xff1a;雷锋网自今年3月份提出&#xff0c;新基建就迅速成为了焦点。新基建涵盖5G基建、特高压、大数据中心、人工智能、工业互联网等七大领域。与以往基础设施建设的“铁公基”…

LINUX下统计代码行数

http://blog.csdn.net/simanstar/article/details/9106997转载于:https://www.cnblogs.com/spectrelb/p/7542731.html