如何在以下代码中获取流或列表的最后一个元素?
哪里data.careas是List<CArea>:
CArea first = data.careas.stream()
.filter(c -> c.bbox.orientationHorizontal).findFirst().get();
CArea last = data.careas.stream()
.filter(c -> c.bbox.orientationHorizontal)
.collect(Collectors.toList()).; //how to?
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,获得第一个元素filter并不难.
然而,获得单行中的最后一个元素是一个真正的痛苦:
Stream.(它只对有限流有意义)first()和last()从List接口,这实在是一种痛苦.我没有看到任何关于不在接口中提供first()和last()方法的论据List,因为其中的元素是有序的,而且大小是已知的.
但根据原始答案:如何获得有限的最后一个元素Stream?
就个人而言,这是我能得到的最接近的:
int lastIndex = data.careas.stream()
.filter(c -> c.bbox.orientationHorizontal)
.mapToInt(c -> data.careas.indexOf(c)).max().getAsInt();
CArea last = data.careas.get(lastIndex);
Run Code Online (Sandbox Code Playgroud)
然而,它确实涉及使用indexOf每个元素,这很可能不是您通常想要的,因为它可能会影响性能.
我正在构建一个Java应用程序,它将不同数量的命令行选项作为输入,文件名始终是最后一项.当我在下面的第二行中指定参数索引时(例如args[2],当我提前知道索引时,所有内容当然都能正常工作,但是我遇到了String[]在处理时访问最终项目的正确语法使用文件或甚至只是一个字符串作为输入与整数数组或当索引号变化时更简单的东西.
public static void main(String[] args) {
String inFile = args.length-1;
Run Code Online (Sandbox Code Playgroud)