我有一个可以包含多个可选ID的类,该类将选择第一个可用ID并将其返回给调用方。像下面这样。
Optional<Phone> homePhone;
Optional<Phone> mobilePhone;
Optional<Phone> emergencyPhone;
Phone getBestPhone() {
return homePhone.map(p -> p)
.orElse(mobilePhone.map(p -> p)
.orElse(emergencyPhone.map(p -> p)
.orElseThrow(() -> new IllegalArgument("No valid phone")))));
}
我想使用像map和orElse这样的可选方法,但在这种情况下,它会导致太多的嵌套。另外两个伪代码选项可能是。
Phone getBestPhone() {
homePhone.ifPresent(p -> { return p; });
mobilePhone.ifPresent(p -> { return p; });
emergencyPhone.ifPresent(p -> { return p; });
throw new IllegalArgument("...");
}
Phone getBestPhone() {
return FirstPresent(homePhone, mobilePhone, emergencyPhone);
}
有没有比我现有的方法更好的方法?我很想通过做香草isPresent()检查来避免嵌套。
IMO,firstPersend
方法似乎更具可读性和可扩展性。我们可以使用Stream#of(T...)
方法将这些可选
包装到一个流,然后找到第一个礼物。
import java.util.Optional;
import java.util.stream.Stream;
public class GetFirstPresent {
public static void main(String[] args) {
Optional<Phone> homePhone = Optional.empty();
Optional<Phone> mobilePhone = Optional.empty();
Optional<Phone> emergencyPhone = Optional.of(new Phone("e123"));
Phone phone = firstPresent(homePhone, mobilePhone, emergencyPhone);
System.out.println(phone.id);
try {
firstPresent(homePhone, mobilePhone);
} catch (IllegalArgumentException e) {
System.out.println(e);
}
}
@SafeVarargs
private static Phone firstPresent(Optional<Phone>... phones) {
return Stream.of(phones).filter(Optional::isPresent)
.findFirst().map(Optional::get).orElseThrow(() -> {
return new IllegalArgumentException("No phone present");
});
}
private static class Phone {
public Phone(String id) {
super();
this.id = id;
}
private String id;
}
}
一个缺点是我们需要@SafeVarargs
来抑制警告,这是无法避免的,根据“为varargs参数创建T的通用数组”编译器警告,有可能解决吗?
问题内容: 所以,我想用香草JS做的事情很简单,但是我使用的是AngularJS,我想知道如何在框架内以最佳方式做到这一点。我想在多个选择框中更新所选的选项。我不想添加或删除任何选项。这是我的HTML外观: 使用以下数组,我想以编程方式从此列表中选择/取消选择选项: 当我在范围中设置此数组时,我希望选择框取消选择不是蓝色或红色的任何内容,然后选择蓝色和红色。我在Google网上论坛上看到的标准回复
我想调用一个函数时,选择的任何选项。类似于这样: 但不知何故不起作用。有人能帮忙吗。 请注意 我不想捕获更改事件,如果我选择已经选择选项,则不会触发更改事件
我使用的是一个具有多个属性的select元素。这只适用于Firefox和Chrome,但不适用于IE9/IE10或IE11。有什么建议让它也适用于IE浏览器吗?看起来IE不接受字符=>
问题内容: 我想选择,,从多个选择其中有10个选项。我只想选择这三个选项。 HTML代码: selenium键代码: 我尝试使用此代码。使用此代码,我可以选择第一个选项,即“ P0_ENGLISH”。但是,选择第一个选项后,我得到一个错误: 问题答案: 要从 Multi Select 元素中选择多个 选项 ,可以使用 ActionChains 模拟 Control单击* ,如下所示: *
我正在进行单选和多选测试。 我有几个问题,每个问题有4个答案。 当每个答案都被分配到单选按钮时,我正在随机排列答案。这就是我洗牌arraylist的方式,Random是一个带有项目的arraylist,r1、r2、r3、r4是单选按钮。 我能够以混乱的方式显示答案,但当我选择答案时,我需要显示答案是正确的还是错误的。 正确答案是B我需要显示正确答案是B。 如何做到这一点。 编辑:我已经尝试过了:
问题内容: 尝试在angularjs中选择关于对象值的多个选项 这是一个代码: 和html jsfiddle上的(非)工作示例 http://jsfiddle.net/andrejkaurin/h9fgK/ 问题答案: 您尝试使用选择倍数(如复选框列表),这有点奇怪。多选输出一个数组。您不能将ng- model放在这样的选项标签上,而是放在选择本身上。因此,由于select将输出值数组,因此您需要