首页
学习
活动
专区
圈层
工具
发布

Java8:使用stream API实现多条条件语句

Java8 Stream API实现多条条件语句

基础概念

Java 8引入的Stream API提供了一种声明式处理集合数据的方式,可以优雅地实现多条条件语句的过滤和操作。Stream API通过链式调用(filter, map, reduce等操作)来处理数据,避免了传统的if-else嵌套。

优势

  1. 代码更简洁、可读性更高
  2. 避免多层嵌套的条件语句
  3. 支持并行处理,提高性能
  4. 函数式编程风格,更易于维护

实现方式

1. 使用多个filter方法

代码语言:txt
复制
List<String> result = list.stream()
    .filter(str -> str.length() > 5)       // 条件1: 长度大于5
    .filter(str -> str.startsWith("A"))    // 条件2: 以A开头
    .filter(str -> !str.contains("test"))  // 条件3: 不包含test
    .collect(Collectors.toList());

2. 使用单个filter结合多个条件

代码语言:txt
复制
List<String> result = list.stream()
    .filter(str -> str.length() > 5 && str.startsWith("A") && !str.contains("test"))
    .collect(Collectors.toList());

3. 复杂条件组合

代码语言:txt
复制
Predicate<String> lengthCondition = str -> str.length() > 5;
Predicate<String> startCondition = str -> str.startsWith("A");
Predicate<String> excludeCondition = str -> !str.contains("test");

List<String> result = list.stream()
    .filter(lengthCondition.and(startCondition).and(excludeCondition))
    .collect(Collectors.toList());

4. 条件分支处理

代码语言:txt
复制
List<String> result = list.stream()
    .map(str -> {
        if (str.length() > 10) {
            return str.toUpperCase();
        } else if (str.length() > 5) {
            return str.toLowerCase();
        } else {
            return str;
        }
    })
    .collect(Collectors.toList());

5. 使用anyMatch/allMatch/noneMatch

代码语言:txt
复制
boolean anyMatch = list.stream()
    .anyMatch(str -> str.length() > 5 && str.contains("a"));

boolean allMatch = list.stream()
    .allMatch(str -> str.length() > 3);

boolean noneMatch = list.stream()
    .noneMatch(str -> str.isEmpty());

应用场景

  1. 数据过滤:从大量数据中筛选出符合多个条件的记录
  2. 数据转换:根据不同的条件对数据进行不同的处理
  3. 数据统计:统计满足多个条件的数据数量
  4. 数据分组:根据多个条件将数据分组

注意事项

  1. 每个filter操作都会遍历整个流,多个简单filter可能比一个复杂filter效率低
  2. 对于复杂的条件逻辑,考虑使用Predicate组合提高可读性
  3. 注意流的终止操作(如collect)是必需的,否则不会执行
  4. 并行流(parallelStream)在处理大量数据时可以提高性能,但要注意线程安全问题
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券