List <Object>中的Map <String,Object>,具有对象的设置属性

时间:2019-08-30 12:56:00

标签: java java-8 java-stream

我有一个List<Item> ItemListList<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}...

1 个答案:

答案 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())));