Function<T,R>接口
Function接口是对接受一个T类型参数,返回R类型的结果的方法的抽象,通过调用apply方法执行内容。
代码示例
/**
* Function<T, R> 函数型接口:
*/
@Test
public void testLambda() {
//字符串处理
String newStr = strHandler("\t\t\t 测试数据去空格 ", (str) -> str.trim());
System.out.println(newStr);
String subStr = strHandler("测试截取字符串", (str) -> str.substring(2, str.length()));
System.out.println(subStr);
String joinStr = strHandler("拼接", str -> str + "字符串");
System.out.println(joinStr);
//int数据处理
Integer i1 = intHandler(10, i -> i * i);
//求平方
System.out.println("求平方:" + i1);
//求和
Integer sum = intHandler(10, i -> i + i);
System.out.println("求和:" + sum);
}
//需求:用于处理字符串
public String strHandler(String str, Function<String, String> fun) {
return fun.apply(str);
}
//需求:用于处理int数据
public Integer intHandler(Integer i, Function<Integer, Integer> fun) {
return fun.apply(i);
}
Consumer 接口
Consumer 接口翻译过来就是消费者,顾名思义,该接口对应的方法类型为接收一个参数,没有返回值, 可以通俗的理解成将这个参数’消费掉了’,一般来说使用Consumer接口往往伴随着一些期望状态的改变或者事件的发生,例如最典型的forEach就是使用的Consumer接口,虽然没有任何的返回值,但是却向控制台输出了语句。 Consumer 使用accept对参数执行行为
代码示例
//Consumer<T> 消费型接口 :
@Test
public void testLambda2() {
happy(10000, m -> System.out.println("买东西消费:" + m + "元"));
}
public void happy(double money, Consumer<Double> con) {
con.accept(money);
}
Supplier 接口
Supplier 接口翻译过来就是提供者,和消费者相反,该接口对应的方法类型为不接受参数,但是提供一个返回值,通俗的理解为这种接口是无私的奉献者,不仅不要参数,还返回一个值,使用get()方法获得这个返回值
代码示例
//Supplier<T> 供给型接口 :
@Test
public void testLambda3() {
//生成10个100以内的随机数
List<Integer> numList = getNumList(10, () -> (int) (Math.random() * 100));
//打印
numList.stream().forEach(System.out::println);
}
//需求:产生指定个数的整数,并放入集合中
public List<Integer> getNumList(int num, Supplier<Integer> sup) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < num; i++) {
//提供
Integer n = sup.get();
list.add(n);
}
return list;
}
Predicate 接口
predicate<T,Boolean> 断言接口,该接口对应的方法为接收一个参数,返回一个Boolean类型值,多用于判断与过滤,当然你可以把他理解成特殊的Funcation<T,R>,但是为了便于区分语义,还是单独的划了一个接口,使用test()方法执行这段行为
代码示例
@Test
public void testLambda4() {
//Predicate<T> 断言型接口:
List<String> list = Arrays.asList("Hello", "aaa", "Lambda", "bbb", "cc");
List<String> filterStr = filterStr(list, s -> s.length() >= 3);
//打印
filterStr.stream().forEach(System.out::println);
}
//需求:将满足条件的字符串,放入集合中
public List<String> filterStr(List<String> list, Predicate<String> pre) {
//非空判断
List<String> strList = Optional.ofNullable(list).orElseGet(ArrayList::new)
//创建串行流
.stream()
//过滤
.filter(s -> pre.test(s))
//返回
.collect(Collectors.toList());
return strList;
}