Java中Steam流常用API介绍_java steamapi

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Stream流常用API

Stream流的常用API(中间操作方法)

名称说明
filter(Predicate<? super T> predicate)用于对流中的数据进行过滤。
limit(long maxSize)获取前几个元素
skip(long n)跳过前几个元素
distinct()去除流中重复的元素。依赖(hashCode和equals方法)
concat(Stream a, Stream b)合并a和b两个流为一个流

filter方法: 用于对流中的数据进行过滤

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    Collections.addAll(list, "张无忌", "赵敏", "周芷若", "张三丰", "张三");

    // 对Stream流中的数据进行过滤, 过滤后会返回一个新的Stream流
    Stream<String> st = list.stream().filter(s -> s.startsWith("张"));
    // 对过滤后的Stream流进行遍历输出
    st.forEach(s -> System.out.println(s));
}

中间方法也称为非终结方法调用完成后返回新的Stream流可以继续使用支持链式编程。

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    Collections.addAll(list, "张无忌", "赵敏", "周芷若", "张三丰", "张三");

    // 对Stream流中的数据进行过滤
    list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s)); // 张无忌 张三丰 张三
}

limit: 获取前几个元素

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    Collections.addAll(list, "张无忌", "赵敏", "周芷若", "张三丰", "张三");
  
    // 获取前两个元素
    list.stream().limit(2).forEach(s -> System.out.println(s)); //张无忌 赵敏
}

skip: 跳过前几个元素

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    Collections.addAll(list, "张无忌", "赵敏", "周芷若", "张三丰", "张三");

    // 跳过前三个元素
    list.stream().skip(3).forEach(s -> System.out.println(s)); // 张三丰 张三
}

distinct: 去除重复元素

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    Collections.addAll(list, "张无忌", "张无忌", "赵敏", "周芷若", "周芷若", "张三丰", "张三");

    list.stream().distinct().forEach(s -> System.out.println(s)); // 张无忌 赵敏 周芷若 张三丰 张三
}

concat: 合并a, b为一个流

public static void main(String[] args) {
    List<String> list1 = new ArrayList<>();
    Collections.addAll(list1, "aaa", "bbb", "aaa");
    List<String> list2 = new ArrayList<>();
    Collections.addAll(list2, "ccc", "ddd", "ccc");

    Stream<String> a = list1.stream();
    Stream<String> b = list2.stream();
    Stream<String> c = Stream.concat(a, b);
    c.forEach(s -> System.out.println(s)); // aaa bbb aaa ccc ddd ccc
}

扩展API: map加工方法

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    Collections.addAll(list, "张无忌", "张无忌", "赵敏", "周芷若", "周芷若", "张三丰", "张三");

    list.stream().map(s -> "金庸小说-" + s).forEach(s -> System.out.println(s));
  	// 打印结果:
    // 金庸小说-张无忌
    // 金庸小说-张无忌
    // 金庸小说-赵敏
    // 金庸小说-周芷若
    // 金庸小说-周芷若
    // 金庸小说-张三丰
    // 金庸小说-张三
}

注意:

在Stream流中无法直接修改集合、数组中的数据, 也就是说操作Stream流不会影响原来的数组或集合。

Stream流的常见终结操作方法:

名称说明
forEach(Consumer action)对此流的每个元素执行遍历操作
long count()返回此流中的元素数

注意:终结操作方法调用完成后流就无法继续使用了原因是不会返回Stream了。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java