一、Lambda 表达式简介
1、什么是 Lambda 表达式
Lambda 表达式是在 JDK 8 中引入的一个新特性,可用于取代大部分的匿名内部类。使用 Lambda 表达式可以完成用少量的代码实现复杂的功能,极大的简化代码代码量和代码结构。同时,JDK 中也增加了大量的内置函数式接口供我们使用,使得在使用 Lambda 表达式时更加简单、高效。
为什么需要 Lambda 表达式
谈起为什么需要 Lambda 表达式,那得从函数式编程开始说起。函数式编程可以简单说是一种编程规范,也就是如何编写程序的方法论。它属于结构化编程的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。函数式编程有很多优点,其中包括:
易于并发编程;
代码的热升级;
更方便的代码管理;
代码简洁,开发快速;
接近自然语言,易于理解;
函数式编程在 C#、Python、JavaScript中都得到充分体现,在 Java 8 版本中也得到了支持。最明显的就是对 Lambda 表达式的支持。很多种迹象表明未来编程语言将是逐渐融合各自的特性,而不是单纯的声明式语言函数编程语言。将来声明式编程语言借鉴函数编程思想,函数编程语言融合声明式编程特性,这几乎是一种必然趋势。
在 Java 中主要引入 Lambda 表达式的作用是对现有编码语义的优化,减少语法冗余。轻量级的将代码封装为数据,使代码简洁,易于理解。
二、Lambda表达式使用案例
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import org.apache.commons.lang3.ArrayUtils;
import org.junit.Test;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* java8使用lamda表达式
*/
public class JavaLambdaTest {
/**
* 字符串转数组,以分隔符
*/
@Test
public void stringToArray() {
//java8以前字符串转数组
String str = "0,1,2,3,4,5";
String[] arr = str.split(","); // 用,分割
System.out.println("java8以前字符串转数组 " + Arrays.toString(arr));
}
/**
* 数组转字符串,以分隔符
*/
@Test
public void arrayToString() {
String[] arr = {"0", "1", "2", "3", "4", "5"};
//方法一: 遍历
StringBuffer strBuffer = new StringBuffer();
for (String s : arr) {
strBuffer.append(s);
}
System.out.println("java8以前数组转字符串: " + strBuffer.toString());
//方法二: 使用StringUtils的join方法
String str2 = org.apache.commons.lang3.StringUtils.join(arr, ",");
System.out.println("使用StringUtils的join方法: " + str2);
//方法三: 使用org.apache.commons.lang3.ArrayUtils的toString方法
String str3 = ArrayUtils.toString(arr, ",");
System.out.println("使用ArrayUtils的toString方法: " + str2);
List<String> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i + "");
}
//方法四: 使用org.springframework.util.StringUtils的arrayToDelimitedString方法
String str4 = StringUtils.arrayToDelimitedString(list.toArray(new String[list.size()]), ",");
System.out.println("使用StringUtils的arrayToDelimitedString方法: " + str2);
}
/**
* String转List
*/
@Test
public void stringToList() {
String str = "11111,你好,是是是";
//方法一: 先使用split方法转成数组,然后再用Arrays.asList方法把数组转成list
//List<String> list1 = Arrays.asList(str.split(","));
List<String> list1 = new ArrayList<String>(Arrays.asList(str.split(",")));
System.out.println("先使用split方法转成数组,然后再用Arrays.asList方法把数组转成list : " + list1);
List<String> list2 = Stream.of(str.split(",")).collect(Collectors.toList());
System.out.println("String字符串转成List<Long>数据格式 : " + list2);
//String字符串转成List<Long>数据格式
String str1 = "1,2,3,4,5,6";
List<Long> list3 = Arrays.stream(str1.split(",")).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
System.out.println("String字符串转成List<Long>数据格式 : " + list3);
}
/**
* List转字符串,以分隔符
*/
@Test
public void collectionToString() {
List<String> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i + 100 + "");
}
//使用for循环遍历方式
StringBuilder sb = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
if (i != 0) {
sb.append(",");
}
sb.append(list.get(i));
}
System.out.println("使用for循环遍历方式: " + sb.toString());
String newStr