有没有一种方法可以打破java中的froEach循环,这是我的代码,我想在验证条件的同时中断循环,但是当我使用break时,它给了我一个错误,我进行了一些研究,发现可以将forEach与break一起使用,有没有办法那么呢?
List <Map<String,Object>> uos = myrefJdbcTemplate.queryForList("select * from parent_bu where type_parent <> 'BU' AND parent_bu <> ''");
String updateParent = "UPDATE `parent_bu` SET `parent_bu` = ? , `type_parent` = ? WHERE `parent_bu` = ? AND type_parent <> 'BU' AND parent_bu <> '' ";
uos.forEach(uo -> {
myrefJdbcTemplate.update(updateParent , preparedStatement -> {
preparedStatement.setString(1,String.valueOf(row.get("code_parent")));
preparedStatement.setString(2,String.valueOf(row.get("level")));
preparedStatement.setString(3,String.valueOf(row.get("code")));
});
/* if (String.valueOf(row.get("level")).equals("BU") ||
String.valueOf("parent_bu").equals("")) **** if these condition is verified I want to break the loop */
});
请帮助,谢谢。
没有。 forEach
通常是个坏主意;它不是异常透明的,不是可变的局部变量透明的,也不是控制流透明的,并且您所获得的回报几乎没有(收集结构决定了迭代如何发生,但是作为一般规则,任意迭代是通常是不受欢迎的,很少应用。如果列表在没有您明确要求的情况下随机决定以并行或随机顺序进行操作,通常是个坏主意!)
list.forEach
很有用,如果您已有一个lambda,而您没有。因此,请勿使用它。只需使用一个普通的for循环,就可以了:
List <Map<String,Object>> uos = myrefJdbcTemplate.queryForList("select * from parent_bu where type_parent <> 'BU' AND parent_bu <> ''");
String updateParent = "UPDATE `parent_bu` SET `parent_bu` = ? , `type_parent` = ? WHERE `parent_bu` = ? AND type_parent <> 'BU' AND parent_bu <> '' ";
for (var uo : uos) {
myrefJdbcTemplate.update(updateParent , preparedStatement -> {
preparedStatement.setString(1,String.valueOf(row.get("code_parent")));
preparedStatement.setString(2,String.valueOf(row.get("level")));
preparedStatement.setString(3,String.valueOf(row.get("code")));
});
if (String.valueOf(row.get("level")).equals("BU") ||
String.valueOf(row.get("parent_bu").equals("")) break;
}