打印deque中的max元素< integer>

yfjy0ee7  于 2021-07-12  发布在  Java
关注(0)|答案(5)|浏览(563)

我有一个整数的deque,我用它作为一个que。我必须添加和删除它的元素,在某些情况下,我需要打印的最大值。
我试过的是:

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

但它印的是- Optional[the current max int] .
谢谢您!

y0u0uwnf

y0u0uwnf1#

那是因为 max 方法 java.util.Stream 返回包含在 Optional . 这是max方法的签名 Optional<T> max(Comparator<? super T> comparator); 下面的示例将为您提供预期的行为:

Optional<Integer> optionalOfMax = deque.stream().max(Integer::compareTo);
if (optionalOfMax.isPresent()) {
    System.out.println(optionalOfMax.orElseThrow());
}
b1zrtrql

b1zrtrql2#

您可以按以下步骤进行:

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` 由将提供的Map函数应用于每个元素所产生的Map流的内容替换该流的每个元素的结果组成。
wj8zmpe1

wj8zmpe13#

您只需使用编写的代码并通过 .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 .

piok6c0g

piok6c0g4#

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

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

qcbq4gxm5#

您可以取消对队列中整数 Package 器的装箱,并使用intstream.max(),它将返回一个optionant:

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

如果 max() 退货 OptionalInt.empty() ,当deque为空时发生。如果要检查空,可以执行以下操作,例如:

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

相关问题