Java8使用(二)
2022/8/3 14:24:07
本文主要是介绍Java8使用(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Stream操作详解
创建流
创建流一般有五种方式:
//1.通过stream方法把List或数组转换为流 @Test public void stream() { Arrays.asList("a1", "a2", "a3").stream().forEach(System.out::println); Arrays.stream(new int[]{1, 2, 3}).forEach(System.out::println); } //2.通过Stream.of方法直接传入多个元素构成一个流 @Test public void of() { String[] arr = {"a", "b", "c"}; Stream.of(arr).forEach(System.out::println); Stream.of("a", "b", "c").forEach(System.out::println); Stream.of(1, 2, "a").map(item -> item.getClass().getName()).forEach(System.out::println); } //3.通过Stream.iterate方法使用迭代的方式构造一个无限流,然后使用limit限制流元素个数 @Test public void iterate() { Stream.iterate(2, item -> item * 2).limit(10).forEach(System.out::println); Stream.iterate(BigInteger.ZERO, n -> n.add(BigInteger.TEN)).limit(10).forEach(System.out::println); } //4.通过Stream.generate方法从外部传入一个提供元素的Supplier来构造无限流,然后使用limit限制流元素个数 @Test public void generate() { Stream.generate(() -> "test").limit(3).forEach(System.out::println); Stream.generate(Math::random).limit(10).forEach(System.out::println); } //5.通过IntStream或DoubleStream构造基本类型的流 @Test public void primitive() { //演示IntStream和DoubleStream IntStream.range(1, 3).forEach(System.out::println); IntStream.range(0, 3).mapToObj(i -> "x").forEach(System.out::println); IntStream.rangeClosed(1, 3).forEach(System.out::println); DoubleStream.of(1.1, 2.2, 3.3).forEach(System.out::println); //各种转换,后面注释代表了输出结果 System.out.println(IntStream.of(1, 2).toArray().getClass()); //class [I System.out.println(Stream.of(1, 2).mapToInt(Integer::intValue).toArray().getClass()); //class [I System.out.println(IntStream.of(1, 2).boxed().toArray().getClass()); //class [Ljava.lang.Object; System.out.println(IntStream.of(1, 2).asDoubleStream().toArray().getClass()); //class [D System.out.println(IntStream.of(1, 2).asLongStream().toArray().getClass()); //class [J //注意基本类型流和装箱后的流的区别 Arrays.asList("a", "b", "c").stream() // Stream<String> .mapToInt(String::length) // IntStream .asLongStream() // LongStream .mapToDouble(x -> x / 10.0) // DoubleStream .boxed() // Stream<Double> .mapToLong(x -> 1L) // LongStream .mapToObj(x -> "") // Stream<String> .collect(Collectors.toList()); }
filter实现过滤操作类似于sql中where
//最近半年的金额大于40的订单 orders.stream() .filter(Objects::nonNull) //过滤null值 .filter(order -> order.getPlacedAt().isAfter(LocalDateTime.now().minusMonths(6))) //最近半年的订单 .filter(order -> order.getTotalPrice() > 40) //金额大于40的订单 .forEach(System.out::println);
map实现转换(投影)类似于sql中的select
这篇关于Java8使用(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-21订单系统资料入门教程:轻松管理你的订单
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java部署资料:新手入门教程
- 2024-09-21Java订单系统资料:新手入门教程与实战指南
- 2024-09-21Java管理系统资料入门教程
- 2024-09-21从零开始学习Java监控系统资料
- 2024-09-21Java就业项目资料:新手入门的必备教程
- 2024-09-21Java全端资料:初学者指南
- 2024-09-21Java全栈资料入门教程及资源汇总
- 2024-09-21Java日志系统资料入门教程