在 Deque<Integer> 中打印最大元素

问题描述

我有一个来自 Integers 的 Deque,我将它用作 Que。我必须在其中添加删除元素,在某些情况下,我需要在 Que 中打印最大值。

我尝试过的事情是:

System.out.println(deque.stream().max(Integer::compareto));

但它打印 - Optional[the current max int]

谢谢!

解决方法

那是因为 maxjava.util.Stream 方法返回包裹在 Optional 中的值。这是 max 方法 Optional<T> max(Comparator<? super T> comparator);

的签名

下面的示例将为您提供预期的行为:

Optional<Integer> optionalOfMax = deque.stream().max(Integer::compareTo);
System.out.println(optionalOfMax.orElseThrow());
,

你可以这样做:

deque.stream().max(Integer::compareTo).ifPresent(System.out::println);

请注意,deque.stream().max(Integer::compareTo) 返回 Optional<Integer>

或者,

deque.stream().flatMapToInt(x -> IntStream.of(x)).max().ifPresent(System.out::println);

Stream#flatMapToInt 返回一个 IntStream,其中包含用通过将提供的映射函数应用于每个元素而生成的映射流的内容替换此流的每个元素的结果。

,

您可以直接使用您编写的代码并通过 .get() 对其进行扩展。

以下代码

public static void main(String[] args) {
    // create a Deque that holds Integers
    Deque<Integer> myDQ = new ArrayDeque<Integer>();
    // add some of them
    myDQ.add(12);
    myDQ.add(13);
    myDQ.add(14);
    myDQ.add(15);
    myDQ.add(16);
    myDQ.add(20);
    myDQ.add(17);
    myDQ.add(18);
    myDQ.add(19);
    // and print
    System.out.println(
            myDQ.stream()
                .max(Integer::compareTo) // the largest one
                .get() // not as Optional but only as Integer
    );
}

只打印 20

,

您可以将队列中的整数包装器拆箱并使用 IntStream.max(),它返回一个 OptionalInt:

deque.stream().mapToInt(Integer::intValue)
    .max()
    .ifPresent(System.out::println);

如果 max() 返回 OptionalInt.empty(),这将不会执行任何操作,当双端队列为空时会发生这种情况。如果你想检查空,你可以这样做,例如:

deque.stream().mapToInt(Integer::intValue)
    .max()
    .ifPresentOrElse(System.out::println,() -> throw new RuntimeException("Attempt to get max of empty collection"));
,

max-方法返回一个 java.util.Optional。如果您只想返回一个 int-Value,您可以使用 orElse 中的 java.util.Optional-Method 返回给定值,如果不存在,则返回另一个默认值。

System.out.println(deque.stream().max(Integer::compareTo).orElse(0));

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...