我已将我的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);
}
}
});
我尝试了类似这样的东西,但我在混合中迷失了它的测试结果案例
任何帮助将不胜感激
答案 0 :(得分:0)
您可以使用此架构
hm.entrySet().stream().filter(SomeClass::isAllBoolean)
.findFirst()
.ifPresent(System.out::println);
private static boolean isAllBoolean(Map.Entry<String, List<Boolean>> values) {
}
SomeClass
是isAllBoolean
方法所在的类。
答案 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
一个来依赖于未记录的功能。