JAVA中流(Stream)的操作

流是一次性的,用过之后会自动关闭。

一、IntStream、DoubleStream和Stream

import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class Stream02 {
    public static void main(String[] args) {
        // 定义List集合
        List<String> list = List.of("a", "b", "c","d","e","f");
        // 跳过一个元素,取出后续三个元素
        Stream<String> s1 = list.stream().skip(1).limit(3);
        // 遍历s1
        s1.forEach(System.out::println);

        // 定义一个数组
        int[] num = {1,2,3,4,5};
        // IntStream不支持Integer数组,只能用int数组
        IntStream ls = Arrays.stream(num);
        // 获取num数组中所有元素之和
        System.out.println(ls.sum());

        // 将多个Integer类型的元素转换为流
        Stream<Integer> is2 = Stream.of(1,2,3,4,5);
        // 使用filter过滤输出大于3的元素
        ls.filter(e -> e > 3).forEach(System.out::print);

        // 生成随机5个double类型的元素并转换成流
        DoubleStream ds = DoubleStream.generate(Math::random).limit(5);
        // 输出所有元素
        ds.forEach(System.out::println);

        // 获取10个1到100之间的元素并转换为double类型,最后转换成流
        DoubleStream ds2 = DoubleStream.generate(() -> new Random().nextInt(1,100)).limit(10);
        // 输出所有元素
        ds2.forEach(System.out::print);

        // 获取10个1到100之间的元素并从小到大排序最后转换成流
        // 输出所有元素
        IntStream is3 = IntStream.generate(() -> new Random().nextInt(1, 100)).limit(10).sorted();
        is3.forEach(System.out::println);

        // 获取从0开始每次增大2的10个元素
        Stream<Integer> s2 = Stream.iterate(0, t -> t + 2).limit(10);
        // 输出所有元素
        s2.forEach(System.out::print);
    }
}

其他类型类推即可。

二、流的重要操作

定义Book对象,生成get、set、有参、无参构造等方法,重写hashCode()和equals()

public class Book {
    private Integer id;
    private String bookName;
    private String author;
    private Integer price;
}
import java.util.ArrayList;
import java.util.List;

public class Demo02 {
    public static void main(String[] args) {
        //建立对象集合
        List<Book> books = new ArrayList<>(List.of(
                new Book(1, "《java基础入门》", "李四", 38),
                new Book(20, "《html基础》", "王四", 28),
                new Book(15, "《企业java项目初步》", "赵四", 18),
                new Book(33, "《mysql》", "张四", 88),
                new Book(33, "《mysql》", "张四", 88),
                new Book(9, "《数据库视频》", "李四", 55)));

        // 判断所有书记是不是价格都超过20元
        System.out.println(books.stream().allMatch(e -> e.getPrice() > 20));

        // 判断是否有书籍价格大于50
        System.out.println(books.stream().anyMatch(e -> e.getPrice() > 50));

        // 判断书籍价格大于50的有多少本
        System.out.println(books.stream().filter(e -> e.getPrice() > 50).count());

        // 判断书籍价格是否没有大于100的
        System.out.println(books.stream().noneMatch(e -> e.getPrice() >100));

        // 获取满足条件的第一条数据
        System.out.println(books.stream().filter(e -> e.getPrice() > 50).findFirst().get());

        // findAny在并行流(在结果中添加parallel()),随机返回一个对象,即多线程
        // for (int i = 0; i < 1000; i++) {
        //     System.out.println(books.stream().filter(e -> e.getPrice() > 50).parallel().findAny().get());
        // }
    }
}

三、流与其它类型之间的转换

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class Stream05 {
    public static void main(String[] args) {
        //建立对象集合
        List<Book> books = new ArrayList<>(List.of(
                new Book(1, "《java基础入门》", "李四", 38),
                new Book(20, "《html基础》", "王四", 28),
                new Book(15, "《企业java项目初步》", "赵四", 18),
                new Book(33, "《mysql》", "张四", 88),
                new Book(33, "《mysql》", "张四", 88),
                new Book(9, "《数据库视频》", "李四", 55)));

        Stream<Book> stream = books.stream();

        // IntStream is = stream.mapToInt(e -> e.getId());
        // is.forEach(System.out::print);

        // Stream<String> s = stream.map(e -> e.getBookName());
        // s.forEach(System.out::println);

        // 流转List集合
        // List<Book> alist = stream.collect(Collectors.toList());
        // alist.forEach(System.out::print);

        // 流转Set集合
        // 将所有书籍名称放入set
        // Stream<String> stringStream = stream.map(Book::getAuthor);
        // Set<String> set = stringStream.collect(Collectors.toSet());
        // System.out.println(set);

        // 将所有Book对象放入set
        // Set<Book> collect = stream.collect(Collectors.toSet());
        // collect.forEach(System.out::println);

        // 流转Array数组
        // Object[] objects = stream.toArray();
        // for (Object object : objects) {
        //     System.out.println(object);
        // }

        // 合并,使用逗号隔开
        System.out.println(stream.map(Book::getAuthor).collect(Collectors.joining(",")));
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值