Java8新特性函数式接口

来源:互联网 发布:仿模板天空 源码 编辑:程序博客网 时间:2024/06/06 00:15
package cn.mldn.java8;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
//java8四大核心的函数式接口
/*
 * Consumer<T>:消费型接口,抽象方法:void accept(T t)  只进不出
 * Supplier<T>:供己型接口,抽象方法:T get()           只出不进
 * Function<T,R>:函数型接口,抽象方法:R apply(T t)    有进有出
 * Predicate<T>:断言型接口   抽象方法:Boolean test(T t) 推断预测
 */
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;


import org.junit.Test;
public class TestFunctionInterface {
//Consumer<T>消费型接口:
   @Test
   public void test1()
   {
  happy(10000, (money)->System.out.println("消费:"+money));
   }
   public void happy(double money,Consumer<Double> con)
   {
  con.accept(money);
   }
   //Supplier<T>:供己型接口
   @Test
   public void test2()
   {
  List<Integer> list= getNumberList(10,()->(int)(Math.random()*100));
       for(Integer n:list)
       {
      System.out.print(n+" ");
       }
   }
   //Function<T,R>:函数型接口
   //产生指定个数的整数
   @Test
   public void test3()
   {
  String str1=strHandler("upper",(str)->str.substring(0,1).toUpperCase()+str.substring(1));
  System.out.println(str1);
   }
   //Predicate<T>:断言型接口
   @Test
   public void test4()
   {
  List<String> list=Arrays.asList("json","XML","redis");
  List<String> list1=filterStr(list,(str)->str.length()>3);
  for(String str:list1)
  {
  System.out.println(str);
  }
   }
   public List<Integer> getNumberList(int num,Supplier<Integer> sup)
   {
  List<Integer> list=new ArrayList<Integer>();
  for(int i=0;i<num;i++)
  {
  Integer n=sup.get();
  list.add(n);
  }
  return list;
   }
   //用于处理字符串
   public String strHandler(String str,Function<String,String> fun)
   {
  return fun.apply(str);
   }
   //将满足条件的字符串,放入集合中
   public List<String> filterStr(List<String> list,Predicate<String> pre)
   {
  List<String> strlist=new ArrayList<String>();
  for(String str:list)
  {
 if(pre.test(str))
 strlist.add(str);
  }
  return strlist;
   }
}
原创粉丝点击