0
点赞
收藏
分享

微信扫一扫

java8特性使用-函数式接口


java8 函数式接口

文章目录

  • ​​java8 函数式接口​​
  • ​​1. 函数式接口内的方法​​
  • ​​2. 函数式接口定义​​
  • ​​3. Supplier​​
  • ​​4. Consumer​​
  • ​​5. Function​​
  • ​​6. Predicate​​
  • ​​7. Optional​​
  • ​​8. Reference​​


 

Functional Interface Name

Explain

Detailed description

Supplier

供给型接口

无参数, 返回一个结果

Consumer

消费型接口

代表了接受一个输入参数并且无返回的操作

Function<T, R>

函数型接口

接受一个输入参数, 返回一个结果

Predicate

断定型接口

接受一个输入参数, 返回一个布尔值结果

 

1. 函数式接口内的方法

  • 唯一的抽象方法(​​函数式接口只有一个抽象方法​​)
  • 使用 default 定义的普通方法(默认方法),通过对象调用。
    实现接口后,因为默认方法不是抽象方法,所以可以不重写,但是如果开发需要,也可以重写 。当然如果接口中的默认方法不能满足某个实现类需要,那么实现类可以覆盖默认方法。签名跟接口default方法一致, 但是不能再加default修饰符。
  • 使用 static 定义的静态方法,通过接口名调用。

 

2. 函数式接口定义

@FunctionalInterface
public interface CustomFunctional<T> {

void execute(T t);

@Override
boolean equals(Object obj);

default T submit(T t) {
return t;
}

static <T> Function<T, T> identity() {
return t -> t;
}

}

 

3. Supplier

public static void main(String[] args) {

// 用于产生一个 100 的函数, 调用 get() 方法获取值
Supplier<Integer> supplier = () -> 100;
// 100
System.out.println(supplier.get());

}

 

4. Consumer

public static void main(String[] args) {

Consumer<String> first = (message) -> System.out.println("first " + message);
Consumer<String> second = (message) -> System.out.println("second " + message);

Consumer<String> consumer = first.andThen(second);
// first message
// second message
consumer.accept("message");

Consumer<String> consumer1 = second.andThen(first);
// second answerail
// first answerail
consumer1.accept("answerail");

}

 

5. Function

public static void main(String[] args) {

String[] arr = {"kobe", "jordan", "iverson", "james", "answer"};
Function<Integer, String> name = (index) -> arr[index];

// jordan
System.out.println(name.apply(1));

}

public static void main(String[] args) {

String[] arr = {"kobe", "answer", "iverson", "james", "jordan"};
HashMap<String, Integer> map = new HashMap<String, Integer>() {{
put("jordan", 1); put("kobe", 2); put("james", 3);
put("iverson", 4); put("answer", 5);
}};

Function<Integer, String> nameFunc = (index) -> arr[index];
Function<String, Integer> rankFunc = map::get;

// 给 nameFunc 传入参数 1, 并将其返回值作为 rankFunc 的传入参数
Integer rank = nameFunc.andThen(rankFunc).apply(1);
// rank: 5
System.out.println("rank: " + rank);

}

public static void main(String[] args) {
String[] arr = {"kobe", "answer", "iverson", "james", "jordan"};
HashMap<Double, Integer> map = new HashMap<Double, Integer>() {{
put(1.1, 4); put(1.2, 0); put(1.3, 2);
put(1.4, 3); put(1.5, 1);
}};

Function<Integer, String> nameFunc = (index) -> arr[index];
Function<Double, Integer> scoreFunc = map::get;

// 给 scoreFunc 传入参数 1.3 并将其结果作为 nameFunc 的传入参数
String name = nameFunc.compose(scoreFunc).apply(1.3);
// name: iverson
System.out.println("name: " + name);

}

public static void main(String[] args) {

// 传入参数即返回值, 即 传入啥返回啥
Function<String, String> function = Function.identity();
String name = function.apply("answerail");
// name: answerail
System.out.println("name: " + name);

}

 

6. Predicate

public static void main(String[] args) {

Predicate<Integer> min = (num) -> num > 5;
Predicate<Integer> max = (num) -> num < 10;

// min < num < max
Predicate<Integer> and = min.and(max);
// true
System.out.println(and.test(7));
// false
System.out.println(and.test(11));

// num > min || num < max
Predicate<Integer> or = min.or(max);
// true
System.out.println(or.test(11));

// !(num > min)
Predicate<Integer> negate = min.negate();
// false
System.out.println(negate.test(11));

}

 

7. Optional

public static void main(String[] args) {

Optional<String> optional = Optional.of("java8 optional by answerail.");
optional.isPresent();
String message = optional.get();
// message: java8 optional by answerail.
System.out.println("message: " + message);


String msg = optional.orElse("java8 optional by answerail at 20190410.");
// msg: java8 optional by answerail.
System.out.println("msg: " + msg);

Optional<String> opt = Optional.empty();
String str = opt.orElse("java8 optional by answerail at 20190410.");
// str: java8 optional by answerail at 20190410.
System.out.println("str: " + str);

// j
optional.ifPresent((s) -> System.out.println(s.charAt(0)));

}

 

8. Reference

  • ​​接口Function、Consumer、Predicate、Supplier的使用​​


举报

相关推荐

0 条评论