当前位置: 首页 > 知识库问答 >
问题:

使用 Java 8 获取列表中的最后一个不为空的元素

盖马鲁
2023-03-14

在Java 7中,如果我想得到一个列表的最后一个非空元素,我会这样写:

public CustomObject getLastObject(List<CustomObject> list) {
    for (int index = list.size() - 1; index > 0; index--) {
        if (list.get(index) != null) {
            return list.get(index);
        }
    }
    // handling of case when all elements are null
    // or list is empty
    ...
}

我想通过使用 lambdas 或 Java 8 的其他功能来编写一个更短的代码。例如,如果我想得到第一个非空元素,我可以这样写:

public void someMethod(List<CustomObject> list) {
    .....
    CustomObject object = getFirstObject(list).orElseGet(/*handle this case*/);
    .....
}

public Optional<CustomObject> getFirstObject(List<CustomObject> list) {
    return list.stream().filter(object -> object != null).findFirst();
}

也许有人知道如何解决这个问题?

共有1个答案

邓正谊
2023-03-14

一个可能的解决方案是以相反的顺序迭代List,并保留第一个非null元素:

public Optional<CustomObject> getLastObject(List<CustomObject> list) {
    return IntStream.range(0, list.size()).mapToObj(i -> list.get(list.size() - i - 1))
                                          .filter(Objects::nonNull)
                                          .findFirst();
}

请注意,流 API 中没有 findLast 方法,因为流不一定是有序的或有限的。

另一种解决方案是循环访问列表,并通过仅保留当前元素来减少它。这有效地将 Stream 减少到最后一个元素。

public Optional<CustomObject> getLastObject(List<CustomObject> list) {
    return list.stream().filter(Objects::nonNull).reduce((a, b) -> b);
}
 类似资料:
  • 问题内容: 在Python中,如何获取列表的最后一个元素? 问题答案: 是最短和最的。 实际上,你可以使用此语法做更多的事情。该语法获取第n到最后一个元素。因此获取最后一个元素,获取倒数第二个,依此类推,一直向下到,这将为你提供第一个元素。 你也可以通过这种方式设置列表元素。例如: 请注意,如果期望的项目不存在,则按索引获取列表项将引发。这意味着如果为空将引发异常,因为空列表不能有最后一个元素。

  • rank ▲ ✰ vote url 61 374 45 700 url 获取列表最后一个元素 在Python里,如何获取一个列表的最后一个元素? some_list[-1]最短最Pythonic的方法. 事实上你可以用这个语法做好多事.some_list[-n]语法获取倒数第n个元素.所以some_list[-1]获取最后一个元素,some_list[-2]获取倒数第二个,等等.最后some_li

  • 我有多个谷歌表单,有几个栏目每天更新。所有工作表都合并到一个摘要页面,当在这些工作表中输入新数据时,该页面将更新。 如何在汇总表的每列中找到最后一个非空单元格(不包括包含返回空白公式的单元格)?例如,A列保存日期,它只是查看团队负责人是否在其工作表中输入了数据。如果是,则输入她的工作表中的日期。公式是: 当我想返回列中的最后一个日期时,我尝试使用以下公式: 它返回一个空白,因为有空单元格,其中的公

  • 本文向大家介绍Python中如何获得列表的最后一个元素,包括了Python中如何获得列表的最后一个元素的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将看到从列表中获取最后一个元素的不同方法。让我们一一看。 使用索引值 我们可以使用索引获取列表的最后一个元素。我们可以通过列表的长度来获取最后一个元素的索引。让我们看一下代码。 示例 输出结果 如果执行上述程序,则将得到以下结果。 使用负索

  • 我想用Java8lambda表达式在java列表中找到max值,所以,我有一个类叫TicketMaster,项表是TicketMasterLog,在TicketMasterLog类中我有StatusMaster类的statusId引用列,所以这里我想在TicketMasterLog列表中找到max statusId,下面我给出我的代码请参考 而TicketMasterItem表是 因此,在列表中,

  • 我想使用RestAssured来测试一个返回JSON对象列表的endpoint。如何使用RestAssured JsonPath验证列表中最后一个对象的内容? 示例返回值: 我尝试使用负索引:< code>body("[-1])。foo ",equal to(" brazz "),但这并不奏效,因为放心认为< code>"[-1]。foo"为空列表。 如何使用JsonPath语法访问列表的最后一个