三 Java8四大内置核心函数式接口
2019-04-11 本文已影响0人
败给小萝莉
Java8为我们提供了四大核心函数式接口:
消费型接口
Comsumer<T>:void accept(T t);
顾名思义,你提供给我内容(有参数),我负责消费(使用你提供的参数,无返回值)
示例:
public void happy(double money, Consumer<Double> con){
con.accept(money);
}
@Test
public void test() {
happy(1000, (x) -> System.out.println("消费 : " + x));
}
供给型接口
Supplier<T> :T get();
顾名思义,这个接口专门产生对象返回给调用者,我不消耗任何东西(无参),专门给你提供内容(有返回值)
示例:产生指定个数的整数并放入集合中
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;
}
@Test
public void test2() {
List<Integer> numList = getNumList(10, () -> (int) (Math.random() * 100));
for (Integer num : numList) {
System.out.println(num);
}
}
函数型接口
Function<T, R> :R apply(T t);
这个接口接收一个参数,并且返回内容,你提供给我一些东西(有参数),我返还给你一些东西(有返回值)。
示例:将一个字符串转成大写
public String strHandler(String str, Function<String, String> fun) {
return fun.apply(str);
}
@Test
public void test3() {
String st = strHandler("Helllo", (str) -> str.toUpperCase());
System.out.println(st);
}
断言型接口
Predicate<T> :boolean test(T t);
顾名思义,做判断,你给我参数,我处理完后给你一个判断的结果:true or false,有参数有返回值并且返回值为boolean类型的值
示例:将字符串长度大于3的字符串放入集合中
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> strList = Arrays.asList("Hello", "mobei", "Lambda", "www", "ok");
List<String> res = filterStr(strList, (str) -> str.length() > 3);
for (String str : res) {
System.out.println(str);
}
}
这四大内置核心函数式接口算是开发中常用的,除开这四个,其实Java8还帮我们提供了其它的函数式接口,理解了这四大核心函数式接口,其它的理解起来也就相当容易了。我们可以去java.util.function包下面查看具体的接口:
函数式接口.png
根据具体的业务需求进行选择,如果都没有那我们就只能选择自己编写函数式接口了