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

Java 8选项,组合语句

昝存
2023-03-14

我是Java8 optionals的新手,我想知道是否有一种方法可以将这两个语句合并为一个,同时保留可选的语句?

public List<String> getEmployeeStreetNames(Employee employee){
     List<Addresses> addresses = Optional.ofNullable(employee)
     .map(Employee::getAddresses)
      .orElse(new ArrayList<>());

   return addresses.stream()
       .map(Address::getStreetName)
       .collect(Collectors.toList())
}

共有1个答案

郦兴德
2023-03-14

首先,避免在诸如orelse之类的“maybe”管道步骤中创建新对象;即使没有使用参数,您也总是会产生创建参数的开销。更喜欢像supplier 这样的签名,或者在本例中是collections.emptylist()。(这对于异常特别重要;始终使用MyException::new()->new MyException(foo)。)

在本例中,有两种方法可以处理管道,嵌套的或连续的。

return Optional.ofNullable(employee)
    .map(Employee::getAddresses)
    .map(a -> a.stream().map(Address::getStreetName).collect(toList()))
    .orElse(emptyList());

return Optional.ofNullable(employee)
    .map(Employee::getAddresses)
    .orElse(emptyList())
    .stream()
    .map(Address::getStreetName)
    .collect(toList());

我通常会使用嵌套版本,因为嵌套管道并不难理解。

 类似资料:
  • 说到编程或java,我只是一个完全的初学者。所以一开始,我的计划是使用JavaFX(结合场景构建器)创建一个窗口,在那里我有一个按钮,可以引导我进入另一个窗口,在那里我有一个组合框。我谷歌了几个小时,想找到一种方法来填充组合框,但我找到的所有解决方案都不适合我。这就是为什么我认为我在这里犯了一些错误,我希望你能以某种方式帮助我。或者在列表中给我一个提示,我应该学习/阅读什么才能自己找到解决方案。首

  • 问题内容: 我们正在使用Selenium WebDriver和JBehave在我们的Web应用程序上运行“集成”测试。我有一种方法,可以在表单输入中输入一个值。 但是,当我尝试使用它在下拉列表中选择一个项目时,它(毫无疑问)失败了 java.lang.UnsupportedOperationException:您只能设置作为输入元素的元素的值 如何在组合中选择一个值? 问题答案: 这是怎么做的:

  • 我在后台有< code>ViewModel(实现< code > INotifyPropertyChanged )和类< code>Category,它只有一个< code>string类型的属性。我的ComboBox SelectedItem绑定到类别的实例。当我更改instance的值时,SelectedItem没有更新,Combobox也没有更改。 编辑:代码 组合框: 物业: 我尝试的是:

  • 所以,我有一个奇怪的问题,我从组合框列表中选择一个项目,为了填充第二个组合框,我必须首先从第一个组合框中再次选择单词,而不是从项目列表中,而是单词本身。只有这样,代码才会注册我选择了该项目。我拥有的代码是简单的$variable.SelectedItem。参见下面的代码; 我想做的就是从下拉列表中选择位置“医院”,然后第二个名为“$ComboBox_Printer”的组合框填充我服务器中的打印机名

  • 我有一个带有2个ComboBox的应用程序,我想将用户的选择返回到一个变量中。我该怎么做?这是我的控制器类: 我需要使用这个变量来改变应用程序的工作方式。在“methode”组合框中,我想要一个包含大量文本字段的新窗口。例如,如果用户选择3,它将打开一个包含3个文本字段的新窗口,或者(如果可能,只需在组合框下方添加3个测试字段)谢谢

  • 我需要在加载时选择组合框的第一个项目。 XAML: 我希望在打开窗口时在组合框中最初选择。 我使用< code>SelectedItem属性在所选项目发生更改时触发一个事件。