首页 > 编程语言 >【java技术总结】Java 数组转 list(列表)的最全方法(含 java8、java9、java10)

【java技术总结】Java 数组转 list(列表)的最全方法(含 java8、java9、java10)

时间:2023-01-20 10:46:17浏览次数:54  
标签:Java java10 Arrays List list java java9 strings asList

对象数组转列表

Collections.addAll(推荐方式)

如果 jdk 1.5 版本以上,推荐如下方法,且返回的列表对象,可以进行数据的增删改查操作:

String[] strings = new String[]{"a", "b", "c"};

List<String> list = new ArrayList<>(strings.length);
Collections.addAll(list, strings);

Arrays.asList(strings)(不可变列表)

java 数组工具类 Arrays 提供的静态方法 asList(T... a) 可以将对象数组转换为 List,但是需要注意的是,它返回的 ArrayList 不是 java.util.ArrayList,而是 Arrays 内部的实现类 ArrayList,它存放数据的 field 是 final 类型修饰的,即数组一旦赋值后,不可改变;如果进行增删改查操作,会报 java.lang.UnsupportedOperationException 异常。

List<String> list = Arrays.asList(strings);

如果非要用 Arrays.asList,还要继续增删改查操作,那就可以稍微调整成如下:

List<String> list = new ArrayList<>(Arrays.asList(strings));

stream 流(java 8)

java 8 开始 Arrays 工具类提供了 stream 方法,可以进行流式操作:

List<String> list = Arrays.stream(strings).collect(Collectors.toList());

这种方式返回的 list 是可变的列表。

如果非要返回 ArrayList 类型,可以如下操作:

ArrayList<String> list = Arrays.stream(strings)
                          .collect(Collectors.toCollection(ArrayList::new));

List.of(java 9,不可改变列表)

java 9 List 接口提供了 of 方法,可以将对象数组转换为不可改变的列表。

List<String> list = List.of(strings);

java 10 两种方式

List<String> list = List.copyOf(Arrays.asList(strings));
List<String> list = Arrays.stream(strings).collect(Collectors.toUnmodifiableList());

基本类型数组转列表

stream 流 boxed 方法(java 8)

java 8 中基本类型流(primitive streams)可以使用 boxed 方法转换为 boxed 类型流,然后再进一步 collect 成对应的列表。

int[] ints = new int[]{1, 2, 3};

List<Integer> list = Arrays.stream(ints)
           .boxed()
           .collect(Collectors.toList());

基本类型工具类(guava)

google 的 guava 库为 java 的基本类型提供了转换的方法,如 Ints.asListLongs.asListDoubles.asList 等,8 个基本类型都对应工具类,且都调用 asList 方法,返回不可变的列表。

import com.google.common.primitives.Ints;

List<Integer> list = Ints.asList(ints);

如果要转成可变列表,则如下:

List<Integer> list = new ArrayList<>(Ints.asList(ints));

标签:Java,java10,Arrays,List,list,java,java9,strings,asList
From: https://www.cnblogs.com/blanset/p/17062502.html

相关文章

  • Javascript数字精度丢失的问题,如何解决
    一、问题分析计算机存储以二进制的方式,而0.1在二进制中是无限循环的一个数字,所以会出现裁剪,精度丢失会出现,0.100000000000000002===0.1,0.200000000000000002===0.2......
  • javascript的防抖与节流
    一、节流一段时间内只能触发一次,如果这段时间内触发多次事件,只有第一次生效会触发回调函数,一段时间过后才能再次触发(一定时间内只执行第一次)应用场景1、鼠标连续不断......
  • Java 中九种 Map 的遍历方式,你一般用的是哪种呢?
    日常工作中Map绝对是我们Java程序员高频使用的一种数据结构,那Map都有哪些遍历方式呢?这篇文章阿粉就带大家看一下,看看你经常使用的是哪一种。通过entrySet来遍历......
  • Java Stream常见用法汇总,开发效率大幅提升
    Java8新增的Stream流大大减轻了我们代码的工作量,但是Stream流的用法较多,实际使用的时候容易遗忘,整理一下供大家参考。1.概述Stream使用一种类似用SQL语句从数据......
  • 2023.1.19 学习初识 JAVA
    C语言1972年诞生了C语言,1982年诞生了C++  1995年诞生了JAVA。C语言贴近硬件,运行速度快,效率极高  (指针和内存管理)操作系统编译器数据库网络系统等C++面向对象......
  • 【java技术总结】Stream流基础使用
    Stream流使用1.获取Stream流对于四种数据分别采取不同的获取方式获取方式方法名说明单列集合defaultStreamstream()Collection中的默认方法双列集合......
  • Mockito Java 测试框架
    Mockito是一个针对Java的mocking框架。它与EasyMock和jMock很相似,但是通过在执行后校验什么已经被调用,它消除了对期望行为(expectations)的需要。其它的mocking库......
  • java10-20K
    ......
  • JavaWeb-会话技术
    JavaWeb-会话技术1,会话跟踪技术的概述对于会话跟踪这四个词,我们需要拆开来进行解释,首先要理解什么是会话,然后再去理解什么是会话跟踪:会话:用户打开浏览器,访问web服务......
  • Java模拟用户登录
    publicstaticvoidmain(String[]args){//1.告诉了已知的用户名和密码Stringname="zhangan";Stringpassword="12345";Scannersc=newScanner(......