1: 消费型接口,Consumer
void accept(T t)接口实例:
需求,将金额处理后输出
@Test
public void testConsumer(){
happy(10000,(money) -> {
money = money/100+20;
System.out.println("逛街,消费 "+ money + " 元");
});
}
public void happy(double money , Consumer<Double> con){
con.accept(money);
}
2: 供给型接口 Supplier : T get()
需求: 生成一个整型集合
@Test
public void testSupplier(){
List<Integer> list = getNumList(10,()-> (int)(Math.random()* 100));
System.out.println("testSupplier: " + list);
}
//产生指定个数单的整数,存入集合中
public List<Integer> getNumList( int num ,Supplier<Integer> sup){
List<Integer> list = new ArrayList<>();
for (int i = 0; i < num; i++) {
list.add(sup.get());
}
return list;
}
3 函数型接口 Function<T,R>
需求: 将字符串去空格
@Test
public void testFunction(){
String str = " \t\t\t\t 江西新余仙女湖 ";
String resut = strHandler(str, (s) -> s.trim());
System.out.println(resut);
}
public String strHandler(String str , Function<String,String> function){
return function.apply(str);
}
4: Predicate : 断言性接口
需求: 将含有ang的省份名筛选出来
@Test
public void testPredicate(){
List<String> list = Arrays.asList("jiangxi" ,"hunan","shanghai","beijing" ,"henan","hebei","jiangsu" ,"zhejiang","yunan");
List<String> result = filterStr(list,(str) -> str.contains("ang"));
System.out.println(result);
}
public List<String> filterStr(List<String> list , Predicate<String> pre){
List<String> resList = new ArrayList<>();
for (String string : list) {
if(pre.test(string)){
resList.add(string);
}
}
return resList;
}
5: 使用方式
如果是对数据进行处理,但不需要返回,视为消费。
生成一个新的数据返回,视为生产。
将数据进行处理后返回,视为函数
对数据进行逻辑判断处理,视为断言