为了账号安全,请及时绑定邮箱和手机立即绑定

Java 8 映射流

Java 8 映射流

倚天杖 2021-12-10 10:10:42
有没有办法让这段代码使用 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);但是我怎样才能让它从这个流中返回不同的布尔值呢?
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

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


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

或者如果你想真正返回true和false值,你可以使用 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;

        });


查看完整回答
反对 回复 2021-12-10
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

我认为你需要 Just :

return Arrays.stream(values)
       .allMatch(value -> pairs.get(value) instanceof Boolean);

笔记

  • error在你的方法中看不到任何原因

  • 也正如@Andy Turner在评论中提到的那样pairs.get(value) instanceof Boolean暗示pairs.get(value) != null你不需要使用pairs.get(value) != null


查看完整回答
反对 回复 2021-12-10
?
富国沪深

TA贡献1790条经验 获得超9个赞

您可以使用以下方法重现与原始代码完全相同的行为


public static boolean areBooleansValid(Map<String, Object> pairs,

                                       List<String> errors, String... values) {

    Optional<String> opt = Arrays.stream(values)

        .filter(s -> !(pairs.get(s) instanceof Boolean))

        .findFirst();

    opt .filter(s -> pairs.get(s) != null)

        .ifPresent(value -> errors.add(value+" does not contain a valid boolean value"));

    return !opt.isPresent();

}

就像您的原始代码一样,它只搜索第一个不是 a Boolean(可能是null)的项目,但仅当值不是 时才添加错误null。


查看完整回答
反对 回复 2021-12-10
  • 3 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信