四大内置核心函数式接口
* Java8 内置的四大核心函数式接口
* Consumer<T>:消费型接口
* void accept(T t)
*
* Supplier<T>:供给型接口
* T get();
*
* Function<T,R>:函数型接口 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;
/**
* 消费型接口Consumer
*/
@Test
public void test1() {
// happy花了:10000.0元
happy(10000, (con) -> System.out.println("happy花了:" + con + "元"));
// 结果 happy花了:10000.0元
}
private void happy(double money, Consumer<Double> con) {
con.accept(money);
}
// Supplier<T>:供给型接口:
@Test
public void test2() {
List<Integer> numList = getNumList(10, () -> (int) (Math.random() * 100)); // ()是sup 里面方法,执行get方法自动调前面自己写的方法
for (Integer num : numList) {
System.out.println(num);
}
System.out.println(numList);
// 结果 [56, 23, 3, 50, 76, 12, 12, 21, 43, 1]
}
// 需求:产生指定个数的整数,并放入集合中
private 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;
}
// Function<T,R>:函数型接口 T是参数 R是返回值
// 需求:用于处理字符串
public String strHandler(String str, Function<String, String> fun) {
return fun.apply(str);
}
@Test
public void test3() {
String result = strHandler(" /t/t/t 威武 ", (str) -> str.trim());
System.out.println(result);
System.out.println(strHandler("我大中国威武!!!", str -> str.substring(2, 9)));
// 结果
///t/t/t 威武
//中国威武!!!
}
//Predicate<T>:断言型接口:
//需求:将满足条件的字符串放入集合中
public List<String> filterStr(List<String> list, Predicate<String> pre) {
List<String> strList = new ArrayList<>();
for (String str : list) {
if (pre.test(str)) {
strList.add(str);
}
}
return strList;
}
@Test
public void test4() {
List<String> list = Arrays.asList("Hello", "atguigu", "Lambda", "www", "ok");
System.out.println(filterStr(list, str -> str.length() > 3));
// 结果 [Hello, atguigu, Lambda]
}