我有一个List<Item> ItemList
和List<String> selectedItemList
Item : {id:String, name:string, isSelected:Boolean}
我想将ItemList转换为Map<String,Item>
= true或false(条件:isSelected
)的selectedItemList.contains(ItemList[n])
。
键是Item的ID。
我尝试:
Map<String, Item> result = itemList.stream()
.collect(Collectors.toMap(Item::getId, value -> itemSelectedList.contains(value.getName())));
我期望的是:
0 : {0,"item1", true}, 1 : {1,"item1", true} , 2 : {2,"item1", false}...
答案 0 :(得分:2)
您的值是布尔值,而不是Item。 您应该先过滤列表,然后创建地图,如下所示:
Map<String, Item> result = itemList.stream()
.filter(item -> itemSelectedList.contains(item.getName()))
.collect(Collectors.toMap(Item::getId, value -> value));
EDIT:给定您的编辑,您不想过滤但要价isSelected属性,您可以只使用一个构造函数,然后:
Map<String, Campaign> result = itemList.stream()
.collect(Collectors.toMap(Item::getId, value -> new Item(value.getId(), value.getName(), itemSelectedList.contains(value.getName())));