java8-06-四大函数式接口

在使用lamdba表达式需要函数式接口的支持    java8已经提供了很多函数式接口
 
在java.util.function包下 
 
核心四大函数式接口
其他函数式接口
 
Consumer<T>  消费型接口    void accept<T t>  一个参数 没有返回值
源码
如何使用
结果
 
 
Supplier<T> 供给型接口   T get<>      无参数 返回一个结果
源码
如何使用
结果
 
 
Function<T,R> 函数式接口   R apply<T t>  一个参数  返回一个结果
源码
如何使用
结果
 
 
Predicate<T>  断言型接口      boolean test<T t>  一个参数 返回布尔值
源码
如何使用
结果
 
  1 package com.wf.zhang.java8.function;
  2 
  3 import org.junit.Test;
  4 
  5 import java.util.ArrayList;
  6 import java.util.Arrays;
  7 import java.util.List;
  8 import java.util.function.Consumer;
  9 import java.util.function.Function;
 10 import java.util.function.Predicate;
 11 import java.util.function.Supplier;
 12 
 13 public class TestFunction {
 14 
 15     /***
 16      * 测试使用Consumer<T>
 17      *
 18      *
 19      * Consumer<T>  消费型接口    void accept<T t>  一个参数 没有返回值
 20      *
 21      *            test01 模拟消费的过程
 22      */
 23     @Test
 24     public void test01() {
 25         shopping(10000, (m) -> System.out.println("买个大House,消费了" + m + "元"));
 26     }
 27 
 28     //定义方法   将Consumer<T> 接口 作为参数
 29     public void shopping(double money, Consumer<Double> con) {
 30         //Consumer<T>  消费型接口    void accept<T t>  一个参数 没有返回值
 31         con.accept(money);
 32     }
 33 
 34 
 35 
 36 
 37     /***
 38      * 测试使用Supplier<T>
 39      *
 40      * Supplier<T> 供给型接口   T get<>      无参数 返回一个结果
 41      *
 42      *              test02 模拟随机产生10个随机数
 43      */
 44     @Test
 45     public void test02() {
 46 
 47         List<Integer> resultList = getNumList(10, () -> (int) (Math.random() * 100));
 48 
 49         for (Integer rs : resultList) {
 50             System.out.println(rs);
 51         }
 52 
 53     }
 54 
 55     //定义方法 将Supplier<T> 作为参数
 56     public List<Integer> getNumList(int num, Supplier<Integer> sup) {
 57         List<Integer> list = new ArrayList<>();
 58         for (int i = 0; i < num; i++) {
 59             // Supplier<T> 供给型接口   T get<> 无参数 返回一个结果
 60             Integer n = sup.get();
 61             list.add(n);
 62         }
 63         return list;
 64     }
 65 
 66 
 67 
 68 
 69     /***
 70      * 测试使用Function<T,R>
 71      *
 72      * Function<T,R> 函数式接口   R apply<T t>  一个参数  返回一个结果
 73      *
 74      *              test03 模拟对字符串的操作
 75      */
 76     @Test
 77     public void test03() {
 78         String s1 = strHandler("abdcef", (s) -> String.valueOf(s.length()));
 79         String s2 = strHandler("   你好   ", (s) -> s.trim());
 80         String s3 = strHandler("abdcef", (s) -> s.toUpperCase());
 81         String s4 = strHandler("ffkkkttt", (s) -> s.toUpperCase().substring(2, 5));
 82         System.out.println(s1);
 83         System.out.println(s2);
 84         System.out.println(s3);
 85         System.out.println(s4);
 86     }
 87 
 88 
 89     //定义方法 将Function<T,R> 作为参数
 90     public String strHandler(String str, Function<String, String> fun) {
 91         //Function<T,R> 函数式接口   R apply<T t>  一个参数  返回一个结果
 92         return fun.apply(str);
 93     }
 94 
 95 
 96 
 97 
 98     /***
 99      * 测试使用Predicate<T>
100      *
101      * Predicate<T>  断言型接口      boolean test<T t>  一个参数 返回布尔值
102      *
103      *              test04 模拟得到长度大于3的字符串
104      */
105     @Test
106     public void test04() {
107 
108         List<String> newList = Arrays.asList("ADCtttt", "as", "adf", "mkjn");
109 
110         List<String> filterStr = filterStr(newList, (str) -> str.length() > 3);
111         for (String str : filterStr) {
112             System.out.println(str);
113         }
114     }
115 
116     //定义方法 将Predicate<T>  断言型接口  作为参数
117     public List<String> filterStr(List<String> list, Predicate<String> pre) {
118         List<String> sList = new ArrayList<>();
119         for (String s : list) {
120             //Predicate<T>  断言型接口  boolean test<T t>  一个参数 返回布尔值
121             if (pre.test(s)) {
122                 sList.add(s);
123             }
124         }
125         return sList;
126     }
127 
128 
129 }
View Code

猜你喜欢

转载自www.cnblogs.com/wf-zhang/p/11824575.html