本文将介绍 Java Stream.min
和 Stream.max
示例。 Java 8 中引入了 java.util.stream.Stream
。使用 Stream.min
方法,我们可以得到给定比较器的这个流的最小元素。使用 Stream.max
方法,我们得到给定比较器的这个流的最大元素。 min
和 max
方法都是流终端操作。
让我们通过示例讨论 min
和 max
方法。
它根据提供的 Comparator
返回此流的最小元素。这是减少的特殊情况,例如使用 Stream.reduce
方法。
从 Java 文档中找到 min
方法声明。
Optional<T> min(Comparator<? super T> comparator)
参数: 传递一个比较器来比较元素。
返回: 该方法返回包含最小元素的 Optional
或空。
抛出: 如果最小元素为空,该方法将抛出 NullPointerException
。
它根据提供的 Comparator
返回此流的最大元素。这是减少的特殊情况,例如使用 Stream.reduce
方法。
从 Java 文档中找到 max
方法声明。
Optional<T> max(Comparator<? super T> comparator)
参数: 传递一个比较器来比较元素。
返回: 该方法返回包含最大元素的 Optional
或空。
抛出: 如果最大元素为空,该方法将抛出 NullPointerException
。
查找字符串和整数流的 min
和 max
示例。
MinMaxDemo1.java
package com.concretepage;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
public class MinMaxDemo1 {
public static void main(String[] args) {
System.out.println("---Min and Max for Integer---");
List<Integer> numList = Arrays.asList(42, 44, 43, 41);
Comparator<Integer> comparator = Comparator.comparing(Integer::intValue);
Optional<Integer> minOptional = numList.stream().min(comparator);
minOptional.ifPresent(e -> System.out.println("Min: " + e));
Optional<Integer> maxOptional = numList.stream().max(comparator);
maxOptional.ifPresent(e -> System.out.println("Max: " + e));
System.out.println("---Min and Max for String---");
List<String> list = Arrays.asList("Mohit", "Nilesh", "Shankar", "Brajesh");
list.stream().min(Comparator.comparing(String::valueOf))
.ifPresent(e -> System.out.println("Min: " + e));
list.stream().max(Comparator.comparing(String::valueOf))
.ifPresent(e -> System.out.println("Max: " + e));
}
}
输出
---Min and Max for Integer---
Min: 41
Max: 44
---Min and Max for String---
Min: Brajesh
Max: Shankar
我们知道 min
和 max
是流缩减的特例。让我们使用 Stream.reduce
方法实现相同的目的。
MinMaxDemoWithReduce.java
package com.concretepage;
import java.util.Arrays;
import java.util.List;
public class MinMaxDemoWithReduce {
public static void main(String[] args) {
System.out.println("---Min and Max for Integer---");
List<Integer> numList = Arrays.asList(42, 44, 43, 41);
//For min
numList.stream().reduce(Integer::min).ifPresent(s -> System.out.println(s)); //41
//For max
numList.stream().reduce(Integer::max).ifPresent(s -> System.out.println(s)); //44
System.out.println("---Min and Max for String---");
List<String> list = Arrays.asList("Mohit", "Nilesh", "Shankar", "Brajesh");
//For min
list.stream().reduce((s1, s2) -> {
if (s1.compareTo(s2) <= 0) {
return s1;
}
return s2;
}).ifPresent(s -> System.out.println(s)); //Brajesh
//For max
list.stream().reduce((s1, s2) -> {
if (s1.compareTo(s2) >= 0) {
return s1;
}
return s2;
}).ifPresent(s -> System.out.println(s)); //Shankar
}
}
查找对象流的 min
和 max
示例。
MinMaxDemo2.java
package com.concretepage;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class MinMaxDemo2 {
public static void main(String[] args) {
List<User> users = Arrays.asList(
new User("Mahesh", 30),
new User("Krishna", 29),
new User("Virat", 28)
);
System.out.println("---Min and Max on the basis of user name---");
users.stream()
.min(Comparator.comparing(u -> u.getUserName()))
.ifPresent(e -> System.out.println("Min: " + e.getUserName()));
users.stream()
.max(Comparator.comparing(u -> u.getUserName()))
.ifPresent(e -> System.out.println("Max: " + e.getUserName()));
System.out.println("---Min and Max on the basis of age---");
users.stream()
.min(Comparator.comparing(User::getAge))
.ifPresent(e -> System.out.println("Min: " + e.getUserName()));
users.stream()
.max(Comparator.comparing(User::getAge))
.ifPresent(e -> System.out.println("Max: " + e.getUserName()));
}
}
class User {
private String userName;
private int age;
public User(String userName, int age) {
this.userName = userName;
this.age = age;
}
//Sets and Gets
}
输出
---Min and Max on the basis of user name---
Min: Krishna
Max: Virat
---Min and Max on the basis of age---
Min: Virat
Max: Mahesh
查找日期流的 min
和 max
示例。
MinMaxDemo3.java
package com.concretepage;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class MinMaxDemo3 {
public static void main(String[] args) {
LocalDate ld = LocalDate.parse("2020-05-15");
List<LocalDate> ldList = Arrays.asList(
ld.minus(10, ChronoUnit.DAYS), //2020-05-05
ld, //2020-05-15
ld.plus(15, ChronoUnit.DAYS) //2020-05-30
);
ldList.stream()
.min(Comparator.comparing(LocalDate::toEpochDay))
.ifPresent(e -> System.out.println("Min: " + e));
ldList.stream()
.max(Comparator.comparing(LocalDate::toEpochDay))
.ifPresent(e -> System.out.println("Max: " + e));
}
}
输出
Min: 2020-05-05
Max: 2020-05-30
查找 IntStream
、LongStream
和 DoubleStream
的 min
和 max
方法的 Java 文档。
对于 IntStream
。
OptionalInt min()
OptionalInt max()
对于 LongStream
。
OptionalLong min()
OptionalLong max()
对于 DoubleStream
。
OptionalDouble min()
OptionalDouble max()
我们可以看到,我们不需要在上述方法中传递比较器。现在找到例子。
MinMaxDemo4.java
package com.concretepage;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
public class MinMaxDemo4 {
public static void main(String[] args) {
System.out.println("--- Min and Max for IntStream ---");
IntStream.of(12, 20, 35, 48).min()
.ifPresent(i -> System.out.println(i));
IntStream.of(12, 20, 35, 48).max()
.ifPresent(i -> System.out.println(i));
System.out.println("--- Min and Max for LongStream ---");
LongStream.of(200, 300, 400).min()
.ifPresent(l -> System.out.println(l));
LongStream.of(200, 300, 400).max()
.ifPresent(l -> System.out.println(l));
System.out.println("--- Min and Max for DoubleStream ---");
DoubleStream.of(110.54, 230.57, 360.65).min()
.ifPresent(l -> System.out.println(l));
DoubleStream.of(110.54, 230.57, 360.65).max()
.ifPresent(l -> System.out.println(l));
}
}
输出
--- Min and Max for IntStream ---
12
48
--- Min and Max for LongStream ---
200
400
--- Min and Max for DoubleStream ---
110.54
360.65
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.concretepage.com/java/java-8/java-stream-min-max
内容来源于网络,如有侵权,请联系作者删除!