首页 > 解决方案 > Java 8 地图流

问题描述

有没有办法让这段代码使用 Java 8?

public static boolean areBooleansValid(Map<String, Object> pairs, List<String> errors, String... values) {
    for (String value : values) {
        if (pairs.get(value) == null) {
            return false;
        } else if (!(pairs.get(value) instanceof Boolean)) {
            errors.add(value + " does not contain a valid boolean value");
            return false;
        }
    }
    return true;
}

在想这样的事情:

Stream<Object> e = Stream.of(values).map(pairs::get);

但是我怎样才能让它从这个流中返回不同的布尔值呢?

标签: javajava-8java-stream

解决方案


如果您只想过滤掉pairs地图中存在的布尔值,您可以应用过滤器功能:

Stream.of(values).filter(value ->  pairs.get(value) != null && pairs.get(value) instanceof Boolean)

或者,如果您想实际返回truefalse值,可以使用 map:

return Stream.of(values).allMatch(value -> {
            if (pairs.get(value) == null) {
                return false;
            }
            if ((pairs.get(value) instanceof Boolean)) {
                return true;
            }
            errors.add(value + " does not contain a valid boolean value");
            return false;
        });

推荐阅读