Java 学习笔记 - 数组类型互转

  • 数组类型转换
    • 字符串数组 to (Integer、Long、Double)列表
      • 传统方式
      • Java8 Stream方式
    • 数组 to 数组
      • 字符串数组 to (int、long、double )数组
      • int[]、long[]、double[] 数组互相转换
      • int[]、long[]、double[] 数组再转回 String[]
  • 基础类型数组 to 列表
    • Java8 以前用乖乖 for 循环
    • Java8 以后用 stream + boxed
      • int数组 to 列表
      • long数组 to 列表
      • double数组 to 列表
      • String数组 to 列表
  • String数组 to 列表
  • 列表 to 数组
    • List to Object[]
    • List to Integer[]
  • 数组转 String
    • Arrays.toString
    • String.join
    • Collectors.joining
    • Stream
  • 参考资料

数组类型转换

测试数据

//【字符串】切成【数组】
String[] arr = "1,2,3,4,5,6".split(",");

字符串数组 to (Integer、Long、Double)列表

传统方式

1.【String数组】转成【Long数组】
这里使用到了 Apache Commons BeanUtils 不过多介绍

//【String数组】转成【Long数组】
Long[] LongIds= (Long[]) ConvertUtils.convert(arr, Long.class);

2.【Long数组】 转 【ArrayList】

// Arrays.asList 返回固定大小的列表。
List<Long> list = Arrays.asList(LongIds);
// new ArrayList 创建动态的 ArrayList
ArrayList<Long> ids = new ArrayList<Long>(list );

Java8 Stream方式

List<Integer> intList = Arrays.stream(arr).map(Integer::valueOf).collect(toList());
System.out.println(intList);
List<Long> longList = Arrays.stream(arr).map(Long::valueOf).collect(toList());
System.out.println(longList);
List<Double> doubleList = Arrays.stream(arr).map(Double::valueOf).collect(toList());
System.out.println(doubleList);

数组 to 数组

字符串数组 to (int、long、double )数组

int[] ints = Arrays.stream(arr).mapToInt(Integer::valueOf).toArray();
long[] longs = Arrays.stream(arr).mapToLong(Long::valueOf).toArray();
double[] doubles = Arrays.stream(arr).mapToDouble(Double::valueOf).toArray();

int[]、long[]、double[] 数组互相转换

// int[] 2 long[]
long[] longs = Arrays.stream(ints).mapToLong(Long::valueOf).toArray();
// int[] 2 double[]
double[] doubles = Arrays.stream(ints).mapToDouble(Double::valueOf).toArray();// long[] 2 int[]
int[] ints1 = Arrays.stream(longs).mapToInt(i -> (int)i).toArray();
// long[] 2 double[]
double[] doubles1 = Arrays.stream(longs).mapToDouble(Double::valueOf).toArray();// double[] 2 int[]
int[] ints2 = Arrays.stream(doubles).mapToInt(i -> (int)i).toArray();
// double[] 2 long[]
long[] longs2 = Arrays.stream(doubles).mapToLong(i -> (long)i).toArray();

int[]、long[]、double[] 数组再转回 String[]

String[] strArr1 = Arrays.stream(ints).mapToObj(String::valueOf).toArray(String[]::new);
String[] strArr2 = Arrays.stream(longs).mapToObj(String::valueOf).toArray(String[]::new);
String[] strArr3 = Arrays.stream(doubles).mapToObj(String::valueOf).toArray(String[]::new);

基础类型数组 to 列表

Java8 以前用乖乖 for 循环

int[] intArr = {1, 2, 3, 4, 5, 6};
List<Integer> ints = new ArrayList<>();
for (int i : intArr) {ints.add(i);
}
log.info("{}", ints); // [1, 2, 3, 4, 5, 6]

Java8 以后用 stream + boxed

int数组 to 列表

int[] intArr = {1, 2, 3, 4, 5, 6};
List<Integer> intList = Arrays.stream(intArr).boxed().collect(Collectors.toList());
System.out.println(intList); // [1, 2, 3, 4, 5, 6]

long数组 to 列表

long[] longArr = {1L, 2L, 3L, 4L, 5L, 6L};
List<Long> longList = Arrays.stream(longArr).boxed().collect(Collectors.toList());
System.out.println(longList); // [1, 2, 3, 4, 5, 6]

double数组 to 列表

double[] doubleArr = {1d, 2d, 3d, 4d, 5d, 6d};
List<Double> doubleList = Arrays.stream(doubleArr).boxed().collect(Collectors.toList());
System.out.println(doubleList); // [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]

String数组 to 列表

String[] arr = "1,2,3,4,5,6".split(",");
List<String> strList  = Arrays.stream(arr).collect(Collectors.toList());
System.out.println(strList ); // [1, 2, 3, 4, 5, 6]

String数组 to 列表

String[] arr = "1,2,3,4,5,6".split(",");// list 不可编辑。
List<String> list = Arrays.asList(arr);
System.out.println(list); // [1, 2, 3, 4, 5, 6]
// 下面会报错,因为 asList 返回的是 Arrays 内部类 ArrayList 它没实现 add
// ArrayList<String>  list = Arrays.asList(arr); // arrayList  不可编辑
ArrayList<String> arrayList = new ArrayList<String>(list);
System.out.println(arrayList); // [1, 2, 3, 4, 5, 6]// Collections.addAll 一切正常
List<String> ints = new ArrayList<>();
Collections.addAll(ints, arr);
log.info("{}", ints); // [1, 2, 3, 4, 5, 6]

列表 to 数组

List to Object[]

Object[] objects = new ArrayList<Integer>(list).toArray();
System.out.println(Arrays.toString(objects)); // [1, 2, 3, 4, 5]

List to Integer[]

Integer[] integers = new ArrayList<Integer>(list).toArray(new Integer[0]);
System.out.println(Arrays.toString(integers)); // [1, 2, 3, 4, 5]

数组转 String

Arrays.toString

注意两边有中括号[]

// @since 1.5
//======================= Array ==============================
String[] arr = {"你好", "哈喽", "啦啦啦"};
String str1 = Arrays.toString(arr);
System.out.println(str1); // [你好, 哈喽, 啦啦啦]

String.join

// @since 1.8
String[] arr = {"你好", "哈喽", "啦啦啦"};
//======================= Array ==============================
String str3 = String.join(", ", arr);
System.out.println(str3); // 你好, 哈喽, 啦啦啦//======================= List<T> ==============================
List<String> list = Arrays.asList(arr);
String string2 = String.join(" - ", list);
System.out.println(string2); // 你好 - 哈喽 - 啦啦啦

Collectors.joining

// @since 1.8
//======================= List<T> ==============================
String[] arr = {"你好", "哈喽", "啦啦啦"};
List<String> list = Arrays.asList(arr);
String string1 = list.stream().collect(Collectors.joining("; "));
System.out.println(string1); // 你好; 哈喽; 啦啦啦

Stream

  1. 自定义收集器写法。
IntStream nums = IntStream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
String str = nums.collect(StringBuilder::new, StringBuilder::append,StringBuilder::append
).toString();
System.out.println(str); // 12345678910

reduce也能实现,只是用收集器语义上更合理吧。

IntStream nums = IntStream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
String str = nums.boxed().map(String::valueOf).reduce("", String::concat);
System.out.println(str); // 12345678910
  1. 需要指定分隔符可以使用:Collectors.joining
IntStream nums = IntStream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
String str = nums.boxed().map(String::valueOf).collect(Collectors.joining(","));
System.out.println(str); // 1,2,3,4,5,6,7,8,9,10

参考资料

笑虾:《Java8实战》 - 读书笔记 - Stream流的基本用法
笑虾:Java 学习笔记 - 集合运算
笑虾:Java 数组 转 ArrayList

Java 学习笔记 - 数组类型互转相关推荐

  1. JAVA学习笔记--数组初始化

    JAVA中,数组只是相同类型的.用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.数组通过方括号下标操作符[]来定义和使用,要定义一个数组只需在类型名后面加上一个方括号即可,如: int[] ...

  2. thinking in java 学习笔记 14 类型信息

    第十四章 类型信息 尼玛,刚刚看完了亚冠,恒大这样都被连扳3球,尼玛的垃圾孙祥,恨死了那个全北现代 好吧,回到学习上 运行时类型信息使得你可以再程序运行时发现和使用类型信息 本章讨论的是java如何让 ...

  3. Java学习笔记---字符类型

    一.字符类型也算是整数类型的一种 字符类型在内存中占有2个字节,可以用来保存英文字母等字符.计算机处理字符类型时,是把这些字符当成不同的整数来看待,因此,严格说来,字符类型也算是整数类型的一种(小写a ...

  4. Java学习笔记 --- 字符类型

    一.字符类型 字符类型可以表示单个字符,字符类型是char, char是两个字节(可以存放汉字),多个字符我们用字符串String. public class Char01 {public stati ...

  5. Java学习笔记#数组的初始化方式

    数组的初始化方式一共有三种:静态初始化,动态初始化,默认初始化. 1 package cn.sxz.arrays; 2 /** 3 * 测试数组的三种初始化方式 4 * @author xingzhu ...

  6. Java学习笔记 --- 布尔类型

    一.布尔类型 1.布尔类型也叫boolean类型,boolean类型数据只允许取值true和false,无null public class Bool {public static void main ...

  7. java学习笔记2(datawhale教程):运算符和表达式、流程控制、数组

    java学习笔记2(datawhale教程):运算符和表达式.流程控制.数组 文章目录 java学习笔记2(datawhale教程):运算符和表达式.流程控制.数组 一.运算符和表达式 1.数学函数与 ...

  8. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  9. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

最新文章

  1. 人工智能算法通俗讲解系列(二):逻辑回归
  2. 单例模式中,你不知道的事~~
  3. 【设计模式】面向对象 - 多态 ( 面向对象 3 要素 | 多态 提升 程序扩展性 | 多态示例 )
  4. 87. Leetcode 343. 整数拆分 (动态规划-基础题)
  5. flink dataset api使用及原理
  6. HQ-day2 C#语言基础
  7. Linux文件操作命令(二)
  8. C++之Big Three:拷贝构造、拷贝赋值、析构函数探究
  9. Redis与Django中配置使用Redis
  10. mysql嵌套查询语句
  11. Allegro PCB导入网表后,PCB规则变化怎么办?
  12. 线下综合体-中岛店的一些思考
  13. 时事点评——红芯浏览器事件
  14. leetcode_1370. 上升下降字符串
  15. 疫情期间,在家办公,这几款高效远程办公协作工具解决燃眉之急
  16. 微信小程序聊天功能 WebSocket 实现发送文字,图片,语音以及WebSocket 常见问题解决方案
  17. mysql报错解决方式:1449 - The user specified as a definer (‘root‘@‘%‘) does not exist
  18. msp430流水灯c语言程序,MSP430单片机流水灯程序
  19. cmd黑客入侵命令大全
  20. 如何去掉“Picked up JAVA_TOOL_OPTIONS: -Djava.vendor=“Sun Microsystems Inc.“” 提示

热门文章

  1. buu做题笔记——[WUSTCTF2020]朴实无华[BSidesCF 2020]Had a bad day
  2. iOS沙盒目录中 Documents Library tmp的作用和区别
  3. 2017-2018-2 20155314《网络对抗技术》Exp6 信息搜集与漏洞扫描
  4. 哪项技术是计算机辅助外科的基础,计算机辅助外科手术计划和模拟原理和方法.pdf...
  5. 【洛谷 P1046】[NOIP2005 普及组] 陶陶摘苹果 题解(比较)
  6. 2021年3月15日:螺纹/橡胶合约 策略体验日记
  7. 赣州服务器系统,赣州服务器费用
  8. php和wordpress教程,堪称最流行强大的免费开源PHP网站程序——WordPress中文正式版...
  9. pythonlist是什么意思_python中的list是什么意思
  10. K-means算法实例