Java8如何将Array转换为Stream的实现

引言

在 java8 中,您可以使用 Arrays.Stream 或 Stream.of 将 Array 转换为 Stream。

1. 对象数组

对于对象数组,Arrays.stream 和 Stream.of 都返回相同的输出。

public static void main(String[] args) {

  ObjectArrays();
 }

 private static void ObjectArrays() {
  String[] array = {"a", "b", "c", "d", "e"};
  //Arrays.stream
  Stream<String> stream = Arrays.stream(array);
  stream.forEach(x-> System.out.println(x));

  System.out.println("======");

  //Stream.of
  Stream<String> stream1 = Stream.of(array);
  stream1.forEach(x-> System.out.println(x));
 }

输出:

a
b
c
d
e
======
a
b
c
d
e

查看 JDK 源码,对于对象数组,Stream.of 内部调用了 Arrays.stream 方法。

// Arrays
public static <T> Stream<T> stream(T[] array) {
  return stream(array, 0, array.length);
}

// Stream
public static<T> Stream<T> of(T... values) {
  return Arrays.stream(values);
}

2. 基本数组

对于基本数组,Arrays.stream 和 Stream.of 将返回不同的输出。

public static void main(String[] args) {

  PrimitiveArrays();
 }

private static void PrimitiveArrays() {
  int[] intArray = {1, 2, 3, 4, 5};

  // 1. Arrays.stream -> IntStream
  IntStream stream = Arrays.stream(intArray);
  stream.forEach(x->System.out.println(x));

  System.out.println("======");

  // 2. Stream.of -> Stream<int[]>
  Stream<int[]> temp = Stream.of(intArray);

  // 不能直接输出,需要先转换为 IntStream
  IntStream intStream = temp.flatMapToInt(x -> Arrays.stream(x));
  intStream.forEach(x-> System.out.println(x));

 }

输出:

1
2
3
4
5
======
1
2
3
4
5

查看源码,

// Arrays
public static IntStream stream(int[] array) {
  return stream(array, 0, array.length);
}

// Stream
public static<T> Stream<T> of(T t) {
  return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
}

Which one

  • 对于对象数组,两者都调用相同的 Arrays.stream 方法
  • 对于基本数组,我更喜欢 Arrays.stream,因为它返回固定的大小 IntStream,更容易操作。

所以,推荐使用 Arrays.stream,不需要考虑是对象数组还是基本数组,直接返回对应的流对象,操作方便。

源码见:java-8-demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • ByteArrayOutputStream简介和使用_动力节点Java学院整理

    ByteArrayOutputStream 介绍 ByteArrayOutputStream 是字节数组输出流.它继承于OutputStream. ByteArrayOutputStream 中的数据被写入一个 byte 数组.缓冲区会随着数据的不断写入而自动增长.可使用 toByteArray() 和 toString() 获取数据. OutputStream 函数列表 我们来看看ByteArrayOutputStream的父类OutputStream的函数接口. // 构造函数 Output

  • ByteArrayInputStream简介和使用_动力节点Java学院整理

    ByteArrayInputStream 介绍 ByteArrayInputStream 是字节数组输入流.它继承于InputStream. 它包含一个内部缓冲区,该缓冲区包含从流中读取的字节:通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的. 我们都知道,InputStream通过read()向外提供接口,供它们来读取字节数据:而ByteArrayInputStream 的内部额外的定义了一个计数器,它被用来跟踪 read() 方

  • Java使用ByteArrayOutputStream 和 ByteArrayInputStream 避免重复读取配置文件的方法

    ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例向数组中写入或读出byte型数据.在网络传输中我们往往要传输很多变量,我们可以利用ByteArrayOutputStream把所有的变量收集到一起,然后一次性把数据发送出去.具体用法如下: ByteArrayOutputStream:    可以捕获内存缓冲区的数据,转换成字节数组. ByteA

  • Java8如何将Array转换为Stream的实现

    引言 在 java8 中,您可以使用 Arrays.Stream 或 Stream.of 将 Array 转换为 Stream. 1. 对象数组 对于对象数组,Arrays.stream 和 Stream.of 都返回相同的输出. public static void main(String[] args) { ObjectArrays(); } private static void ObjectArrays() { String[] array = {"a", "b&qu

  • Java8如何将Array转换为Stream的实现代码

    引言 在 java8 中,您可以使用 Arrays.Stream 或 Stream.of 将 Array 转换为 Stream. 1. 对象数组 对于对象数组,Arrays.stream 和 Stream.of 都返回相同的输出. public static void main(String[] args) { ObjectArrays(); } private static void ObjectArrays() { String[] array = {"a", "b&qu

  • java8中Stream的使用示例教程

    前言 Java8中提供了Stream对集合操作作出了极大的简化,学习了Stream之后,我们以后不用使用for循环就能对集合作出很好的操作. 本文将给大家详细介绍关于java8 Stream使用的相关内容,下面话不多说了,来一起看看详细的介绍吧 1. 原理 Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator. 原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作: 高级版本的 Stream,用户只要给出需

  • Java8中的Stream流式操作教程之王者归来

    前言 相对于Java8之前的Java的相关操作简直是天差地别,Java8 的流式操作的出现,也很大程度上改变了开发者对于Java的繁琐的操作的印象,从此,Java也走向了函数式编程的道路! 1 流的创建 1.1 流的创建方法 既然需要聊聊流的操作,那么,首先还是先看看怎么创建流. 创建流的方法有三种,分别是:Stream.of().Stream.iterate().Stream.generate(),然后,分别看一下这三个方法的声明. static <T> Stream<T> of

  • Java8中Stream的详细使用方法大全

    目录 一.概述 1.使用流的好处 2.流是什么? 二.分类 三.Stream的创建 1.通过 java.util.Collection.stream() 方法用集合创建流 2.使用 java.util.Arrays.stream(T[]array)方法用数组创建流 3.使用 Stream的静态方法:of().iterate().generate() 四.Stream API简介 1.遍历/匹配(foreach/find/match) 2.按条件匹配filter 3.聚合max.min.count

  • 如何利用Java8 Stream API对Map按键或值排序

    一.什么是Java 8 Stream 使用Java 8 Streams,我们可以按键和按值对映射进行排序.下面是它的工作原理: Java Stream函数式编程?用过都说好,案例图文详解送给你 将Map或List等集合类对象转换为Stream对象 使用Streams的sorted()方法对其进行排序 最终将其返回为LinkedHashMap(可以保留排序顺序) sorted()方法以Comparator作为参数,从而可以按任何类型的值对Map进行排序.如果对Comparator不熟悉,可以看本号

  • Java8的Stream()与ParallelStream()的区别说明

    Java8 Stream()与ParallelStream()区别 Stream 无状态:指元素的处理不受之前元素的影响: 有状态:指该操作只有拿到所有元素之后才能继续下去. 非短路操作:指必须处理所有元素才能得到最终结果: 短路操作:指遇到某些符合条件的元素就可以得到最终结果,如 A || B,只要A为true,则无需判断B的结果. ParallelStream 对于ParallelStream,需要知道的是里面的执行是异步的,并且使用的线程池是ForkJoinPool.common,可以通过

  • JDK1.8新特性Stream流式操作的具体使用

    一. 前言 随着Java的发展,越来越多的企业开始使用JDK1.8 版本.JDK1.8 是自 JDK1.5之后最重要的版本,这个版本包含语言.编译器.库.工具.JVM等方面的十多个新特性.本次文章将着重学习Stream. Stream 是JDK1.8 中处理集合的关键抽象概念,Lambda 和 Stream 是JDK1.8新增的函数式编程最有亮点的特性了,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作.使用Stream API 对集合数据进行操作,就类似于使用SQ

  • java中List、Array、Map、Set等集合相互转换

    java中List.Array.Map.Set等集合相互转换 在java中,我们经常需要对List.Array等做一些转换操作,当然转换方法有很多种,但哪种方法既方便又高效呢?在这里向大家介绍一下集合间的最佳转换方法. 1.List转换为Array List<String> list = new ArrayList<String>(); list.add("China"); list.add("Switzerland"); list.add(

  • springmvc接收json串,转换为实体类List方法

    开始我用List<泛型>接受json串,如下,结果list内并非泛型对象,而是JSONObject对象.这样在遍历的时候就报了转化异常的错误.我不知道为什么springmvc在处理这个的时候并没有将json对象转化为泛型对象(我认为应该能获取到,可能是配置问题或者使用不当导致的),这个错误用实际证明了java是假泛型. 如何解决呢,暂时有两种方案,第一种是使用json工具类转化json对象为泛型对象,第二种使用数组接受,然后将数组转化为list对象.代码如下下.如果哪天找到了更好的解决方案,或

随机推荐