package com.xx;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
/**
* @author xx
* DateTime: 2019/11/14 16:42
* Description: Java8内置四大核心函数式接口
* Consumer<T>:消费型接口
* void accept<T t>
* Suppier<T>:供给型接口
* T get()
* Function<T, R>:函数型接口
* R apply(T t)
* Predicate<T>:断言型接口
* boolean test(T t)
*
* 简单介绍下:Lambad表达式,用于简化代码,并不会对代码的执行原理产生影响
* Lambad的格式:(参数,可以是有参也可以是无参) -> {方法体,一些对参数进行操作的代码}
* ::操作符可以更加简化代码,替代箭头符这种形式
* 对象::实例方法
* 类::静态方法
* 类::实例方法
* eg:
* (x) -> System.out.println(x);
* System.out::println;
*/
public class LambdaTest1 {
/**
* Predicate<T>:断言型接口
*/
@Test
public void test3() {
List<String> list = Arrays.asList("aaaa", "bbb", "cccc", "ddd", "eeee");
List<String> strings = filterStr(list, (s) -> s.length() > 3);
System.out.println(strings);
}
/**
* 将满足条件的字符串放入集合中
*/
public List<String> filterStr(List<String> list, Predicate<String> pre) {
ArrayList<String> strList = new ArrayList<>();
for (String str : list) {
if(pre.test(str)){
strList.add(str);
}
}
return strList;
}
/**
* Function<Tm R>函数型接口
*/
@Test
public void test2 () {
String s = strHandler("ahfja45646 dsfsdfjo5465fsd4f", (str) -> str.toUpperCase());
// 也可以使用::这种方式来写
// String s = strHandler("ahfja45646 dsfsdfjo5465fsd4f", String::toUpperCase);
System.out.println(s);
}
/**
* 字符串处理
*/
public String strHandler (String str, Function<String, String> fun) {
return fun.apply(str);
}
/**
* Supplier<T>供给型接口
*/
@Test
public void test1 () {
List<Integer> numberList = getNumberList(10, () -> new Random().nextInt(100));
numberList.forEach(System.out::println);
System.out.println(numberList);
}
/**
* 产生一些整数,并放入集合中
*/
public List<Integer> getNumberList(int num, Supplier<Integer> sup) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < num; i++) {
Integer n = sup.get();
list.add(n);
}
return list;
}
/**
* Consumer<T>消费型接口
*/
@Test
public void test() {
happy(10000, (m) -> System.out.println("吃饭花费:" + m + "元"));
}
public void happy(double money, Consumer<Double> consumer){
consumer.accept(money);
}
}
Java8 内置的函数式接口
猜你喜欢
转载自blog.csdn.net/progammer10086/article/details/103157524
今日推荐
周排行