使用java 8流,如何将Map<Integer, Map<String, Boolean>>
展平为List<Boolean>
,以便最终列表包含所有值中的所有布尔值?
以下是数据示例:
1 -> [{"ABC" -> true}, {"DEF" -> true}]
2 -> [{"DEF" -> false}, {"EFG" -> true}]
3 -> [{"ABC" -> true}, {"DEF" -> false}]
我想将其展平为List<Boolean>
,以便我的列表包含:
{true, true, false, true, true, false}
订单并不重要。内容很重要。
答案 0 :(得分:2)
试试这个:
Map<Integer, Map<String, Boolean>> map = new HashMap<Integer, Map<String, Boolean>>();
final List<Boolean> collect = map
.values()
.stream()
.flatMap(it -> it.values().stream())
.collect(Collectors.toList());
答案 1 :(得分:1)
您可以执行以下操作:
final Map<Integer, List<Entry>> map = new HashMap<>();
map.put(1, Arrays.asList(new Entry("ABC", true), new Entry("DEF", true)));
map.put(2, Arrays.asList(new Entry("DEF", false), new Entry("EFG", true)));
map.put(3, Arrays.asList(new Entry("ABC", true), new Entry("DEF", false)));
final List<Boolean> booleans = map.entrySet()
.stream()
.flatMap(entry -> entry.getValue().stream())
.map(entry -> entry.value)
.collect(Collectors.toList());
System.out.println(booleans);
但请注意,此订单不会保存在此处,因为这是HashMap
。
答案 2 :(得分:1)
看看以下内容:
final List<Boolean> collect = map.values().stream() // Stream<Map<String,Boolean>>
.map(Map::values) // Stream<Collection<Boolean>>
.flatMap(Collection::stream) // Stream<Boolean>
.collect(Collectors.toList());
与此答案和其他答案的不同之处在于,每行只包含一个操作(我个人更喜欢,更易读)。
答案 3 :(得分:0)
基于
我想将其扁平化为List,以便我的列表包含:{true,true,false,true,true,false}
解决方案可能就像这样
Map<Integer, Map<String, Boolean>> map = new HashMap<>();
map.put(1, new HashMap<String, Boolean>(){{put("ABC", true);put("DEF", true);}});
map.put(2, new HashMap<String, Boolean>(){{put("DEF", false);put("EFG", true);}});
map.put(3, new HashMap<String, Boolean>(){{put("ABC", true);put("DEF", false);}});
System.out.println(map.entrySet().stream().flatMap( t -> t.getValue().values().stream()).collect(Collectors.toList()));