如何过滤哈希图并找到第一次出现

how to filter hashmap and find 1st occurance

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

中是什么样子

所以我的哈希图看起来像

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

我需要在单个键中获取数组列表中所有 true 的第一次出现

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

所以如果发生了 /// 做其他事情 // 做其他事情

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

            for (Object object : value) {

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

            }
});

我尝试过类似的方法,但我在这里迷失了它的测试所有案例

任何帮助将不胜感激

您可以使用此架构

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

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

}

SomeClass 是 class,其中 isAllBoolean 方法所在。

试试下面的代码片段。

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
            });

显然你需要一个 filter 来检查一个全真布尔数组,一个 findFirst 来找到第一个和一个 get 来处理 [=12] =] returns 一个 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 -> [true, true]

顺便说一句:未定义 Map 的迭代顺序,因此您通过尝试捕获 first 来依赖未记录的功能。