针对字符串测试布尔值或真空/空值为true?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (52)

为了得到True或NotNull / NotEmpty值的节的名称,我从下面的Java对象创建一个Map然后遍历它。

public class Assessment {

private Boolean section1Checkbox1;
private Boolean section1Checkbox2;
private Boolean section1Comments;

private Boolean section2Checkbox1;
private Boolean section2Checkbox2;
private Boolean section2Comments;

more sections.....

我已经将该对象转换为一个Map,然后我重复:

    Map<String, Object> map = oMapper.convertValue(needsAssessment, Map.class);

    Iterator it = map.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pair = (Map.Entry)it.next();
        if (pair.getValue()==true||NotNull) {
            // Get Section Name
            String[] sectionName = pair.getKey().toString().split("(?=\\p{Upper})");
            System.out.println(sectionName[0]);
        }
    }

pair.getValue()测试存在错误:

有没有办法在一个语句中测试true(如果是布尔值)和NotNull或Empty(如果是字符串)?(或更好的方法?)

提问于
用户回答回答于

这段代码可以运行:

Map<String, Object> map = oMapper.convertValue(assessment, Map.class);
System.out.println(map);

Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pair = (Map.Entry)it.next();
    if (pair.getValue() instanceof Boolean) {
        Boolean currentCheckbox = (Boolean) pair.getValue();
        // Get Section/Subject Name
        System.out.println(pair.getKey());
        if (currentCheckbox) {
            String[] sectionName = pair.getKey().toString().split("(?=\\p{Upper})");
            System.out.println(sectionName[0]);
        }
    }
}
用户回答回答于

代码:

Map<String, Object> map = oMapper.convertValue(assessment, Map.class);
map.entrySet()
   // stream all entries
   .stream() 
   // filter bei value being TRUE (this is null safe)
   .filter((e) -> Boolean.TRUE.equals(e.getValue())) 
   // transform entry to key split by regex
   .map(e -> e.getKey().split("(?=\\p{Upper})"))
   // transform to first array item
   .map(a -> a[0])
   // print
   .forEach(System.out::println);

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励