如何过滤hashmap并找到第一次出现

时间:2017-11-13 09:36:59

标签: java arrays conditional

我已将我的hashmap转换为json,因为我不知道它在java中的样子

所以我的hashmap看起来像

{"1":[true,false],
"2":[true,true],
"3":[true]}

我需要在单个键

中的数组列表中首次出现true

在这种情况下,它的2是第1次出现

所以如果出现了///做其他事//做其他事情

   hm.forEach((key, value) -> {

            for (Object object : value) {

                   boolean b = (boolean)object;
                   if(!b){
                   break;
                    }else{
                       System.out.println(key+"->"+b);
                   }

            }
});

我尝试了类似这样的东西,但我在混合中迷失了它的测试结果案例

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:0)

您可以使用此架构

hm.entrySet().stream().filter(SomeClass::isAllBoolean)
        .findFirst()
        .ifPresent(System.out::println);

private static boolean isAllBoolean(Map.Entry<String, List<Boolean>> values) {

}

SomeClassisAllBoolean方法所在的类。

答案 1 :(得分:0)

尝试下面的代码段。

hm.forEach((key, value) -> {
            boolean allTrue=true;
                        for (Object object : value) {
                            allTrue = (boolean)object;
                            if(!allTrue){ //stop if you found a false in the true/false array
                                break;
                            }
                        }//out of the inner iteration
                        if(allTrue){//if this variable is true, it means the above iteration had all values true
                            //do your stuff
                            break;
                        }
                        allTrue=true; //reset
            });

答案 2 :(得分:0)

显然,你需要一个filter来检查一个全真的布尔数组,一个findFirst找到第一个,一个get来处理findFirst这个事实返回Optional

public void test(String[] args) {
    Map<String, Boolean[]> hm = new HashMap<>();
    hm.put("1", new Boolean[]{true, false});
    hm.put("2", new Boolean[]{true, true});
    hm.put("3", new Boolean[]{true});
    Map.Entry<String, Boolean[]> first = hm.entrySet().stream()
            .filter(es -> allTrue(es.getValue()))
            .findFirst()
            .orElse(null);
    System.out.println(first.getKey()+" -> "+ Arrays.toString(first.getValue()));
}

private boolean allTrue(Boolean[] a) {
    for (Boolean b : a) {
        if (!b) return false;
    }
    return true;
}

打印

  

2 - &gt; [true,true]

顺便说一句:Map的迭代顺序没有定义,所以你试图捕获first一个来依赖于未记录的功能。