欢迎访问宙启技术站
智能推送

Java Stream API中的函数

发布时间:2023-06-12 07:08:57

Java Stream API 是 Java 8 引入的一种新的 API,它主要用于在集合、数组等数据源中进行函数式操作。Java Stream API 中最常用的操作是函数,这些函数被称为 “函数式接口”,Java Stream API 中提供了多种不同类型的函数式接口,每一种接口都有不同的功能,下面我们来介绍一些常用的函数式接口。

1. Predicate

在 Java Stream API 中, Predicate 是一个函数式接口,它的类型是: Predicate<T>,用于当做一些判断条件。Predicate 接口中有一个抽象方法 test(),该方法的返回值是 boolean 类型。test() 方法返回 true 表示满足条件,false 表示不满足条件。

例子:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

Predicate<Integer> predicate = x -> x > 3;

numbers.stream().filter(predicate).forEach(System.out::println);

2. Function

在 Java Stream API 中,Function 是一个函数式接口,它的类型是: Function<T, R>,用于将一个值转换成另一个值。Function 接口中有一个抽象方法 apply(),该方法接收一个 T 类型的参数,返回一个 R 类型的参数。

例子:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

Function<Integer, Integer> function = x -> x * 2;

numbers.stream().map(function).forEach(System.out::println);

3. Consumer

在 Java Stream API 中,Consumer 是一个函数式接口,它的类型是: Consumer<T>,用于对集合中的元素进行操作。Consumer 接口中有一个抽象方法 accept(),该方法接收一个 T 类型的参数,没有返回值。

例子:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

Consumer<Integer> consumer = x -> System.out.println(x);

numbers.stream().forEach(consumer);

4. Supplier

在 Java Stream API 中,Supplier 是一个函数式接口,它的类型是: Supplier<T>,用于生成一些值。Supplier 接口中有一个抽象方法 get(),该方法没有参数,返回一个 T 类型的值。

例子:

List<Integer> numbers = Stream.generate(() -> new Random().nextInt(100)).limit(10).collect(Collectors.toList());

Supplier<Integer> supplier = () -> Collections.max(numbers);

System.out.println(supplier.get());

5. BinaryOperator

在 Java Stream API 中,BinaryOperator 是一个函数式接口,它的类型是: BinaryOperator<T>,用于将两个值进行运算。BinaryOperator 接口中有一个抽象方法 apply(), 该方法接收两个 T 类型的参数,并返回一个 T 类型的值。

例子:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

BinaryOperator<Integer> binaryOperator = (x, y) -> x * y;

System.out.println(numbers.stream().reduce(binaryOperator).get());

6. UnaryOperator

在 Java Stream API 中,UnaryOperator 是一个函数式接口,它的类型是: UnaryOperator<T>,它是 Function 子接口的一种,UnaryOperator 接口的特点是它的输入参数类型和输出参数类型一致。UnaryOperator 接口中有一个抽象方法 apply(), 该方法接收一个 T 类型的参数,并返回一个 T 类型的值。

例子:

UnaryOperator<String> unaryOperator = x -> x.toUpperCase();

System.out.println(unaryOperator.apply("hello, world"));

7. BiFunction

在 Java Stream API 中,BiFunction 是一个函数式接口,它的类型是: BiFunction<T, U, R>,用于将两个值转换成另一个值。BiFunction 接口中有一个抽象方法 apply(),该方法接收一个 T 类型的参数和一个 U 类型的参数,返回一个 R 类型的参数。

例子:

Map<Integer, String> map = new HashMap<>();

map.put(1, "One");

map.put(2, "Two");

BiFunction<Integer, String, String> biFunction = (key, value) -> value.toUpperCase();

map.replaceAll(biFunction);

System.out.println(map);

8. BiConsumer

在 Java Stream API 中,BiConsumer 是一个函数式接口,它的类型是: BiConsumer<T, U>,用于对集合中的两个元素进行操作。BiConsumer 接口中有一个抽象方法 accept(),该方法接收一个 T 类型的参数和一个 U 类型的参数,没有返回值。

例子:

Map<Integer, String> map = new HashMap<>();

map.put(1, "One");

map.put(2, "Two");

BiConsumer<Integer, String> biConsumer = (key, value) -> System.out.println(key + ": " + value.toUpperCase());

map.forEach(biConsumer);

9. IntPredicate

在 Java Stream API 中,IntPredicate 是一个函数式接口,它的类型是: IntPredicate,用于当做一些判断条件。IntPredicate 接口中有一个抽象方法 test(),该方法的返回值是 boolean 类型。test() 方法接收一个 int 类型的参数,返回 true 表示满足条件,false 表示不满足条件。

10. IntFunction

在 Java Stream API 中,IntFunction 是一个函数式接口,它的类型是: IntFunction<R>,用于将一个 int 值转换成另一个值。IntFunction 接口中有一个抽象方法 apply(),该方法接收一个 int 类型的参数,返回一个 R 类型的参数。

这些是 Java Stream API 中常用的一些函数式接口,使用这些函数可以让我们更加方便地进行集合、数组等数据源的操作,提高我们的代码效率。