当前位置:  开发笔记 > 编程语言 > 正文

获取列表的最小和最大字符串

如何解决《获取列表的最小和最大字符串》经验,为你挑选了2个好方法。

我有一个,List list并希望按字母顺序获取该列表的第一个和最后一个字符串.我想使用Java 8和Streams与收集器的强大功能来解决这个问题.

这不起作用:

String first = list.stream().collect(Collectors.minBy(String.CASE_INSENSITIVE_ORDER));

它给了我一个编译器错误:

类型不匹配:无法从Optional转换为String

你能解释一下为什么并告诉我做我想做的最好的方法吗?



1> Tunaki..:

Collectors.minByCollectors.maxBy返回Optional:如果Stream为空,Optional则返回空; 否则,Optional返回包含结果的内容.

如果您希望null在Stream为空时拥有默认值(或只是),则可以调用orElse.

String first = list.stream().collect(minBy(String.CASE_INSENSITIVE_ORDER)).orElse(null);

此外,如果您确定Stream不为空,则可以直接调用get()并检索该值.


作为旁注,您还可以通过调用Collections.min(resp.Collections.max)返回最小值:

String first = Collections.min(list, String.CASE_INSENSITIVE_ORDER);

无需创建Stream管道.请注意,如果列表为空,这将引发异常.



2> JB Nizet..:

错误信息非常清楚.所以是javadoc:Collector.minBy()产生类型的结果Optional,即Optional在你的情况下.

为什么?因为如果流恰好是空的,它不能返回任何字符串.所以你需要从返回的Optional中获取 String值.collect()

请注意,get()将抛出一个异常,因为流是空的,因此找不到最小值coult.如果这是你想要的,因为永远不应该发生空列表,那很好.否则,您应该使用orElse()或orElseThrow()来返回备用默认值,或者抛出另一个异常.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有