如何使用java stream api过滤键集并返回地图的值

时间:2017-05-18 08:27:53

标签: java java-stream

我想重写一个循环遍历地图键的方法,如果键选择了一个属性,则返回该值。更具体:

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这对我来说也没关系。

1 个答案:

答案 0 :(得分:2)

您应该每次都过滤一个密钥。您只需将isSelected方法的方法引用传递给filter

即可
List<JRadioButton> selectedButtons = 
    radioButtons.keySet()
                .stream()
                .filter(JRadioButton::isSelected)
                .collect(Collectors.toList());

至于摆脱断言,这取决于如果没有选择按钮或选择了多个按钮你想要发生什么。如果可能出现这些情况,您必须处理它们。