闲空时看了看java8的新特性,发现lambda表达式的优美与简洁,瞬间起了兴趣,然后写了写几个demo先入门。
函数式接口
一,Predicate 接口中包含一个抽象方法,boolean test(T t) 。用于条件判断的场景:
public boolean checkString(String s, Predicate<String> p) {
return p.test(s);
}
@Test
public void main2() {
String a = "abcdefg";
checkString(a, new Predicate<String>() {
@Override
public boolean test(String s) {
return false;
}
});
boolean b=checkString(a,(String s)-> {return a.length()>5;});
//判断字符串长度是否大于5
boolean b=checkString(a, s-> a.length()>5);
二,Supplier (生产者) 接口包含一个无参方法:T get() 。用来获取一个泛型参数指定类型的对象数据。由于这是一个函数式接口,这就意味着对应的 Lambda 表达式需要对外提供一个符合泛型类型的对象数据。
public String getString(Supplier<String> sup) {
return sup.get();
}
@Test
public void main3() {
String s=getString(new Supplier<String>() {
@Override
public String get() {
return "胡歌";
}
});
String s1 = getString(() -> "胡歌");
}
求数组最大的数
public int getMax(Supplier<Integer> sup) {
return sup.get();
}
@Test
public void main4() {
int[] arr = {1, 3, 5, 7, 2, 9};
int maxValue=getMax(()->{
int max=arr[0];
for (int i:arr) {
if (i > max) {
max = i;
}
}
return max;});
System.out.println(maxValue);
}
三,Consumer(消费者)接口与 Supplier 接口相反,他目的是消费一个数据,数据类型由泛型决定。抽象方法:void accept(T t)。具体消费什么,需要自定义(输出,计算······)
public void method(String name, Consumer<String> con) {
con.accept(name);
}
@Test
public void main5() {
method("赵丽媛",name->{
//对字符串反向输出
String thname = new StringBuffer(name).reverse().toString();
System.out.println(thname);
});
}
Consumer中默认方法:andThen。如果方法的参数和返回值都是 Consumer 类型,在消费数据的时候,首先做个 A,然后做 B,实现组合式消费。
public void method1(String s, Consumer<String> con1, Consumer<String> con2) {
con1.andThen(con2).accept(s);
}
@Test
public void main6() {
String a = "Hello";
method1(a,
(s)->{
//所有字符串变大写
System.out.println(s.toUpperCase());},
(s)->{
//所有字符串变小写
System.out.println(s.toLowerCase());
}
);
}
四,Function<T,R> 接口用来根据一个类型的数据得到另一个类型的数据,前者是前置条件,后者为后置条件。抽象方法为 R apply(T t) ,根据类型 T 的参数获取类型的 R 的结果。比如将 String 类型转换为 Integer 类型。
public int change(String s, Function<String,Integer> fun) {
int in = fun.apply(s);
return in;
}
@Test
public void main7() {
String a = "12345";
//把String类型转化int类型
int b=change(a,(str)-> Integer.parseInt(str));
System.out.println(b);
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于