Java|带有示例的收集器 maxBy(Comparator 比较器)
收集器 maxBy(Comparator< ? super T >comparator)用于根据作为参数传递的比较器查找元素。它返回一个收集器,该收集器根据给定的比较器生成最大元素,描述为Optional
句法:
public static
Collector>
maxBy(Comparator super T> comparator)
其中使用的术语如下:
- 接口 Collector
:一种可变归约操作,可将输入元素累积到可变结果容器中,在处理完所有输入元素后,可选择将累积结果转换为最终表示。归约操作可以顺序或并行执行。 - T:归约操作的输入元素的类型。
- A:归约操作的可变累积类型。
- R:归约操作的结果类型。
- 可选:一个容器对象,它可能包含也可能不包含非空值。如果存在值,isPresent() 将返回 true,而 get() 将返回该值。
- Comparator:比较函数,它对某些对象集合进行总排序。比较器可以传递给排序方法以允许精确控制排序顺序。比较器还可用于控制某些数据结构(例如排序集或排序图)的顺序,或为不具有自然排序的对象集合提供排序。
参数:此方法采用 Comparator 类型的参数比较器,它是一个比较函数,它对某些对象集合进行总排序。比较器可以传递给排序方法以允许精确控制排序顺序。比较器还可用于控制某些数据结构(例如排序集或排序图)的顺序,或为不具有自然排序的对象集合提供排序。
返回值:此方法返回一个收集器,该收集器根据传递的比较器产生最大值。
下面是一些示例来说明 maxBy() 的实现:
方案一:
// Java code to show the implementation of
// Collectors maxBy(Comparator comparator) function
import java.util.Comparator;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
class GFG {
// Driver code
public static void main(String[] args)
{
// creating a Stream of strings
Stream s = Stream.of("2", "3", "4", "5");
// using Collectors maxBy(Comparator comparator)
// and finding the maximum element
// in reverse order
Optional obj = s
.collect(Collectors
.maxBy(Comparator
.reverseOrder()));
// if present, print the element
// else print the message
if (obj.isPresent()) {
System.out.println(obj.get());
}
else {
System.out.println("no value");
}
}
}
输出:
2
示例 2:
// Java code to show the implementation of
// Collectors maxBy(Comparator comparator) function
import java.util.Comparator;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
class GFG {
// Driver code
public static void main(String[] args)
{
// creating a Stream of strings
Stream s = Stream.of();
// using Collectors maxBy(Comparator comparator)
// and finding the maximum element
// in reverse order
Optional obj = s
.collect(Collectors
.maxBy(Comparator
.reverseOrder()));
// if present, print the element
// else print the message
if (obj.isPresent()) {
System.out.println(obj.get());
}
else {
System.out.println("no value");
}
}
}
输出:
no value