我有一张这样一些价值观的 map :
Map<String, String> roleMap = new HashMap<>();
map.put(1,"A");
map.put(2,"B;C;D");
map.put(3,"A;C");
以及一些限制值的列表:
List<String> restrictedList= List.of("B", "C");
我需要判断值"A"
是否出现在 map 的每个键中,而不是与限制列表中的一个值一起出现,然后抛出一些错误.
我成功地做到了这一点,但我认为完全使用streams而不是半途而废可以做得更好.
这是我的解决方案:
map.forEach((key, value) -> {
if (Arrays.stream(value.toString().split(";"))
.anyMatch(role -> "A".contains(role))
&& CollectionUtils.containsAny(Arrays.asList(value.toString().split(";")), restrictedList)) {
errorsList.add(String.format("%s combination can't be used with 'A'", value))
};
});
上述场景的结果应该输出密钥号3
无效,因为只有密钥号3
包含"A
以及受限列表中的一些值.
但我想知道如何用流实现它?
我在anyMatch()
之前试过filter()
,但没用.