Consumer
Consumer表示消费一个字符串。
基本写法:
public class ConsumerTest {
public static Consumer<String> printString = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
public static void main(String[] args) {
List<String> list = List.of("111", "222", "333");
list.stream().forEach(printString);
}
}
lambda写法
public static Consumer<String> printString = s -> System.out.println(s);
方法引用写法(其实就是简化的lambda表达式)
public static Consumer<String> printString = System.out::println;
Supplier
public class SupplierTest {
public static Supplier<String> studentIdGenerator = () -> "student id:"+ new Random().nextInt(10);
public static void main(String[] args) {
System.out.println(studentIdGenerator.get());
}
}
Function
Function第一个参数是输入值,第二个是输出值,就是T转换为R的函数。
import java.util.Objects;
/**
* Represents a function that accepts one argument and produces a result.
*
* @param <T> the type of the input to the function
* @param <R> the type of the result of the function
*
* @since 1.8
*/
@FunctionalInterface
public interface Function<T, R> {
...
}
public class FunctionTest {
public static Function<Integer, String> integerToString = i -> Integer.toString(i);
public static void main(String[] args) {
List<Integer> list = List.of(Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3));
System.out.println(list.stream().map(integerToString).collect(Collectors.joining(",")));
}
}
输出:1,2,3
Predicate
public class PreDecideTest {
public static Predicate<String> isBlank = s -> s.isBlank();
public static void main(String[] args) {
List<String> list = List.of("", "1", "2");
System.out.println(list.stream().filter(isBlank).count());
}
}
输出:1
public class PreDecideTest {
public static Predicate<String> isBlank = s -> s.isBlank();
public static Predicate<String> startWithA = s -> s.startsWith("A");
public static void main(String[] args) {
List<String> list = List.of("", "A11", "B22", "");
System.out.println(list.stream().filter(isBlank.or(startWithA)).count());
}
}
输出:3