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)

相关推荐

  • Java8中Lambda表达式使用和Stream API详解

    前言 Java8 的新特性:Lambda表达式.强大的 Stream API.全新时间日期 API.ConcurrentHashMap.MetaSpace.总得来说,Java8 的新特性使 Java 的运行速度更快.代码更少.便于并行.最大化减少空指针异常. 0x00. 前置数据 private List<People> peoples = null; @BeforeEach void before () { peoples = new ArrayList<>(); peoples

  • JAVA8 STREAM COLLECT GROUPBY分组实例解析

    这篇文章主要介绍了JAVA8 STREAM COLLECT GROUPBY分组实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 实体类People,有个返回list的buildPeopleList方法,方便测试. import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; impo

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

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

  • java8 stream 操作map根据key或者value排序的实现

    引言 最近小编自己一个人在负责一个项目的后台开发,其中有一部分是统计相关的功能,所以需要一些排序或者分组的操作,之前这种操作小编觉得还是比较麻烦的,虽热有一些现成的工具类,但是工具类的写法也是比较复杂的,但是如果使用java8 stream流的话就比较简单了,并且代码量会大大的减少,下面总结几个对map的操作. 1.map 根据value排序 Map<String,BigDecimal> map =new HashMap<>(); map.put("one",

  • java8使用Stream API方法总结

    Stream是java8中处理集合的关键抽象概念,它可以指定您希望对集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作.使用Stream API对集合数据进行操作,就类似于使用SQL执行的数据库查询. Stream 的三个操作步骤 1.创建Stream. 得到Stream流的第一种方式: 可以通过Collection系列集合提供提供的Stream()或parallelStream @Test public void test1() { //可以通过Collection系列集合提供提供的

  • 详解Java8新特性Stream之list转map及问题解决

    List集合转Map,用到的是Stream中Collectors的toMap方法:Collectors.toMap 具体用法实例如下: //声明一个List集合 List<Person> list = new ArrayList(); list.add(new Person("1001", "小A")); list.add(new Person("1002", "小B")); list.add(new Person

  • Java如何使用Optional与Stream取代if判空逻辑(JDK8以上)

    通过本文你可以用非常简短的代码替代业务逻辑中的判null校验,并且很容易的在出现空指针的时候进行打日志或其他操作. 注:如果对Java8新特性中的lambda表达式与Stream不熟悉的可以去补一下基础,了解概念. 首先下面代码中的List放入了很多Person对象,其中有的对象是null的,如果不加校验调用Person的getXXX()方法肯定会报空指针错误,一般我们采取的方案就是加上if判断: public class DemoUtils { public static void main(

  • Java8中利用stream对map集合进行过滤的方法

    前言 Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找.遍历.过滤以及常见计算等. 最近公司在大张旗鼓的进行代码审核,从中也发现自己写代码的不好习惯.一次无意的点到了公司封装的对map集合过滤的方法,发现了stream.于是研究了一下.并对原有的代码再次结合Optional进行重构下 原有方法说明 主要处理过滤条件Map对象,过滤掉了null和空字符串 等操作 这

  • 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

  • java 将byte中的有效长度转换为String的实例代码

    一般的我们使用byte接收读取到的数据,若数据没有达到byte定义的大小时,我们直接将byte转换为String则会出现乱码的情况,在这种情况下应该基于read的返回值来转换byte,否则将产生乱码的情况, 下面是一个简单的示例: package com.javaio.myinputstream; public class MyConsole { public static void main(String argv[]) throws Exception { System.out.printl

  • 使用nginx方式实现http转换为https的示例代码

       最近在写一个小程序,因为小程序官网上必须要使用https,之前网站都是使用的http,而且使用的阿里云服务,于是就在阿里云上购买的ssl服务,以下是配置过程.    1.首先是去阿里云上购买ssl,当然有免费版,但是只能支持一个域名,而且同一个域名只能购买20个证书,各个明细子域名都算一个域名  2.购买ssl证书之后去证书控制台,这个时候需要补全资料,补全之后等待审核,一般只需几分钟就能审核通过.  3.审核之后就需要去下载证书 4.然后需要去所在服务器上配置key和pem,当然我们这里

  • C++实现将长整型数转换为字符串的示例代码

    C++实现将长整型数转换为字符串 /* * Created by Chimomo */ #include <iostream> using namespace std; char *convertLongToStr(long L) { int i = 1; int n = 1; while (!(L / i < 10)) { i *= 10; ++n; } char *str = (char *) malloc(n * sizeof(char)); int j = 0; while (L

  • javascript Array数组对象的扩展函数代码

    今天重点讲下 如何给Array对象扩展 1.直接在Array.prototype 上扩展 2.用自己方法对数组对象进行扩展 直接在Array.prototype上扩展,不能直接对dom对象使用(如:document.getElementsByTagName('div')得到的nodeList); 对有洁癖的同学而言 也破了原始生态环境的 : ) 先来看下 yui操作数组的一些方法,这里我对源码简单剥离并改动了下 复制代码 代码如下: (function(){ var YArray; YArray

  • C#实现汉字转换为拼音缩写的代码

    本文实例为大家分享了C#汉字转换为拼音缩写的实现代码,供大家参考,具体内容如下 using System; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web

  • Silverlight将图片转换为byte的实现代码

    最近总是有人问如何通过Silverlight上传图片并保存的后台服务器?众所周知,Silverlight是客户端程序,不能很好与服务器进行"沟通",上传图片的方法呢大致都是通过以下流程: 1.客户端获取图片-->2.转换能够传输的数据-->3.传递数据到服务端-->4.服务端还原数据为图片 第一步和第四步没有问题,问题大多出在第二步和第三步,如何得到客户端和服务端都能识别并且容易传递的数据呢? 如果你使用的客户端和服务端都是.NET方案,这就非常好办,可以通过下面的方

  • JavaScript中把数字转换为字符串的程序代码

    1:把数字转换为字符串的方法 复制代码 代码如下: var string_value = String(number);     string_value = number.toString(); var n = 17;      binary_string = n.toString(2);                //Evaluates to "10001"      octal_string = "0" + n.toString(8);        //

  • 本地对象Array的原型扩展实现代码

    复制代码 代码如下: Array.prototype.del=function(){ var b={},c,i=0,l=this.length,j; for(;i<l;i++){ c=this.shift(); c in b ? b[c]++ : b[c]=0; } for(j in b){ if(b[j]>0)this.push(+j||j); } return this; } var a=[1,2,2,3,3,3,'a','b','b']; alert(a.del()); 果果的去重方法

随机推荐