Stream API以及Lambda表达式

在Java 8中引入了Stream API以及Lambda表达式,这使得处理集合数据变得更加简洁高效。下面我将详细介绍一些常见的操作,并给出相应的代码示例。

Stream API

Stream API是一个用于处理集合数据的新工具,它支持声明式编程风格,允许你在数据源上执行复杂的查询操作。Stream API的核心组件包括Stream接口及其子类型如IntStream等。

Lambda 表达式

Lambda表达式是一种匿名函数,可以直接作为方法参数传递。它们是创建单方法接口(也称为函数式接口)实例的一种方式。

常用操作

1. 创建Stream

  • 从集合创建:
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
  • 通过数组创建:
String[] array = new String[]{"a", "b", "c"};
Stream<String> streamFromArray = Arrays.stream(array);

2. 中间操作(Intermediate Operations)

中间操作可以链接在一起形成流水线,每个操作都会返回一个新的流对象,除了终结操作外都不会执行任何计算。

  • filter:过滤流中的元素。
Stream<String> filteredStream = stream.filter(s -> s.startsWith("a"));
  • map:映射每个元素到另一个类型。
Stream<Integer> lengths = stream.map(String::length);
  • flatMap:将流中的每个值替换成另一个流,然后将所有的流连接成一个流。
Stream<String> words = Stream.of("Hello World").flatMap(s -> Stream.of(s.split(" ")));
  • sorted:排序流中的元素。
Stream<String> sortedStream = stream.sorted();

3. 终结操作(Terminal Operations)

终结操作会从流中产生结果或副作用。一旦执行了终结操作,流就被认为已被“消耗”,无法再在其上调用其他方法。

  • forEach:遍历流中的每个元素。
stream.forEach(System.out::println);
  • collect:收集流中的元素到集合或其他形式的结果中。
List<String> resultList = stream.collect(Collectors.toList());
  • reduce:将流中的元素组合起来得到单一结果。
Optional<String> result = stream.reduce((s1, s2) -> s1 + s2);
  • anyMatch, allMatch, noneMatch:测试是否至少有一个元素符合给定的条件。
boolean anyStartWithA = stream.anyMatch(s -> s.startsWith("a"));
  • findFirst/findAny:获取第一个/任意匹配的元素。
Optional<String> firstElement = stream.findFirst();
  • count:返回流中的元素个数。
long count = stream.count();

示例

假设我们有一个用户列表,我们想找出所有姓“张”的用户的名字,并按名字长度排序后输出。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

class User {
    private String name;
    // 构造器,getters 和 setters 省略
    public User(String name) { this.name = name; }
    public String getName() { return name; }
}

public class Main {
    public static void main(String[] args) {
        List<User> users = Arrays.asList(
            new User("张三"),
            new User("李四"),
            new User("王五"),
            new User("张飞")
        );

        List<String> names = users.stream()
                                  .filter(user -> user.getName().startsWith("张"))
                                  .sorted(Comparator.comparing(User::getName))
                                  .map(User::getName)
                                  .collect(Collectors.toList());

        System.out.println(names); // 输出: [张三, 张飞]
    }
}

以上就是使用Java 8 Stream API和Lambda表达式的常见操作以及一个简单的示例。希望这些信息对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值