我想重写一个循环遍历地图键的方法,如果键选择了一个属性,则返回该值。更具体:
Map<JRadioButton, Configuration> radioButtons = ...
public Configuration getSelectedConfiguration()
for (JRadioButton radioButton : radioButtons.keySet()) {
if(radioButton.isSelected()){
return radioButtons.get(radioButton);
}
}
}
我基本上想要所选Configuration
的{{1}}。我现在面临的问题是,弄清楚何时以及如何正确过滤。我的方法现在没有编译,因为它说:
Stream&gt;类型中的方法过滤器(Predicate&gt;);不适用于参数((键) - &gt; {})
上面的此错误消息中也有一些类型,但我无法正确编辑。
JRadioButton
单选按钮分组为List<JRadioButton> selectedButtons = Stream.of(radioButtons.keySet()).filter(keys -> {
keys.forEach(key -> {
key.isSelected();
});
}).collect(Collectors.toList());
// I want to get rid of this assertion if possible
assert ( selectedButtons.size()==1 );
return radioButtons.get(selectedButtons.get(0));
,因此我确信只会选择一个。如果有可能我也不需要ButtonGroup
这对我来说也没关系。
答案 0 :(得分:2)
您应该每次都过滤一个密钥。您只需将isSelected
方法的方法引用传递给filter
:
List<JRadioButton> selectedButtons =
radioButtons.keySet()
.stream()
.filter(JRadioButton::isSelected)
.collect(Collectors.toList());
至于摆脱断言,这取决于如果没有选择按钮或选择了多个按钮你想要发生什么。如果可能出现这些情况,您必须处理它们。