Java - Stream Filter 多条件筛选过滤

news/2025/2/14 8:16:45/

Java Stream流中Filter用于通过设置的条件过滤出元素 ,示例如下:

List strings = Arrays.asList(“abc”, “”, “bc”, “efg”, “abcd”,"", “jkl”);List filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());

如果需要进行多条件过滤

我们可以对这些参数进行处理,我们只是需要做一下判断,即:

让所有参数默认为 false,然后对传进来的值进行取值判断,若满足该条件为true,多个条件进行多次判断

判断完成之后 会拿到所有的boolean值 通过 && 拼接返回,即 有一个为false,即返回值为false

通过该方法会对一个对象进行多条件过滤

public static List<BidListVo> checkOperationv1(List<BidListVo> list, BidProgressEnum progressEnum){Integer progress = Integer.valueOf(progressEnum.getCode());String nodeId = progressEnum.getNode();List<BidListVo> collect = list.stream().filter(bidListVo -> filterProgress(bidListVo,progress)  ).collect(Collectors.toList());return collect;}private static boolean filterProgress(BidListVo bidListVo, Integer progress) {//副流程未开始 只判断主流程if(StringUtils.isEmpty(bidListVo.getReviewProgress())){return Integer.valueOf(bidListVo.getProgress()) >= progress ? true: false;}else if(Integer.valueOf(bidListVo.getProgress()) >= progress ||Integer.valueOf(bidListVo.getReviewProgress()) >= progress){// 主流程 独立流程 任意一个大于当前筛选进度就好return true;}return false;}

示例 

public class MultiFilterTest {public static void main(String[] args) {List<User> userList = getUserList();// 筛选 age > 18 && address = "上海" 的userList<User> filterList = userList.stream().filter(user -> filterAgeAndAddress(user,18,"上海")).collect(Collectors.toList());filterList.forEach(System.out::println);}// 筛选 age > 18 && address = "上海" 的userprivate static boolean filterAgeAndAddress(User user,Integer age,String address){if(user.getAge() > 18 && address.equals(user.getAddress())){return true;}return false;}private static List<User> getUserList() {List<User> userList = new ArrayList<>();userList.add(new User(1,"张三",18,"上海"));userList.add(new User(2,"王五",16,"上海"));userList.add(new User(3,"李四",20,"上海"));userList.add(new User(4,"张雷",22,"北京"));userList.add(new User(5,"张超",15,"深圳"));userList.add(new User(6,"李雷",24,"北京"));userList.add(new User(7,"王爷",21,"上海"));userList.add(new User(8,"张三丰",18,"广州"));userList.add(new User(9,"赵六",16,"广州"));userList.add(new User(10,"赵无极",26,"深圳"));return userList;}
}

输出如下:


http://www.ppmy.cn/news/1245424.html

相关文章

MYSQL基础知识之【修改数据,删除数据】

文章目录 前言MySQL UPDATE 查询使用PHP脚本更新数据 MySQL DELETE 语句从命令行中删除数据使用 PHP 脚本删除数据 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术…

JBase到JRT

JBase之前是站在之前基础上新做的java框架。所以带入一些老的历史习惯&#xff0c;比如库和空间都以LIS开头&#xff0c;实体只能是LIS.Model等。为了做到更通用的框架&#xff0c;需要剔除LIS特性&#xff0c;实体肯定不能只能叫LIS.Model了。同时之前只关注业务脚本化的事忘了…

wireshark 抓包提示

[TCP Previous segment not captured] 在TCP的传输阶段&#xff0c;同一台主机发出的数据段应该是连续的&#xff0c;即后一个包的Seq等于前一个包的SeqLen&#xff08;三次握手和四次挥手是个例外&#xff09;。如果wireshark发现后一个包的Seq号大于前一个包的SeqLen&#xf…

STL: 容器适配器stack 与 queue

目录 1.容器适配器 1.1 STL标准库中stack和queue的底层结构 1.2 deque的简单介绍(了解) 1.2.1 deque的原理介绍 1.2.2 deque的缺陷 1.2.3 为什么选择deque作为stack和queue的底层默认容器 2. stack的介绍和使用 2.1 stack的介绍 2.2 stack的使用 2.3 利用deque模拟实现…

springboot 返回problem+json

spring所有配置都在WebMvcAutoConfiguration中 其中有 ProblemDetailsExceptionHandler 容器中的一个组件 -ControllerAdvice用来集中处理异常的 -点进ResponseEntityExceptionHandler 包含这些异常&#xff0c;如果出现以下异常&#xff0c;会被springboot支持以RFC 7807规…

你了解Redis 的二进制安全吗

最近面试的时候被问到Redis 的二进制安全相关八股文面试题。Redis二进制安全内容比较多&#xff0c;以下是简单的总结大致的过程&#xff0c;需要深入学习的建议跳过 Redis是基于C语言进行开发的&#xff0c;而C语言中的字符串是二进制不安全的&#xff0c;所以Redis就没有直接…

SimpleCG小游戏开发系列(1)--扫雷

一、前言 前面我们学习了SimpleCG的游戏开发框架,从本篇开始,我们用一系列小游戏的开发来加深对框架的了解.我们先以windows的经典游戏--扫雷,作为首个例子。游戏预览如下 二、框架搭建 因为游戏程序的大体框架差不多&#xff0c;所以我们可以搭建一个通用的主程序。如下所示&a…

卡车轮胎硫化机液压站比例阀控制器

硫化机适用于各种橡胶制品的硫化&#xff0c;是各种热固性塑料压制成型的先进热压设备。硫化机分电加热、蒸汽加热和导热油加热三种形式。PLC控制&#xff0c;显示屏数字显示&#xff0c;可实现手动和自动控制。自动控制可实现合模、排气、控温、硫化计时、报警、开模卸荷等功能…