stream流操作,求解答

两个集合list<map<string, object>与list,如何使用stream流过滤前者,找出前者的key与后者值相同的value

试试这个

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<Map<String, Object>> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();

        Map<String, Object> map1 = new HashMap<>();
        map1.put("key1", "value1");
        map1.put("key2", "value2");
        map1.put("key3", "value3");
        list1.add(map1);

        Map<String, Object> map2 = new HashMap<>();
        map2.put("key4", "value4");
        map2.put("key5", "value5");
        map2.put("key6", "value6");
        list1.add(map2);

        list2.add("value2");
        list2.add("value5");

        List<Object> result = list1.stream()
                .flatMap(map -> map.entrySet().stream())
                .filter(entry -> list2.contains(entry.getValue()))
                .map(Map.Entry::getValue)
                .collect(Collectors.toList());

        System.out.println(result);
    }
}
  • 你可以参考下这篇文章:Map和List排序,用Stream流实现
  • 除此之外, 这篇博客: stream 用法(list转map)(string转list)(list转map)中的 算和 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • int count = freeChannels.stream().mapToInt(m -> Integer.valueOf(m.get(“count”).toString())).sum();

    计算map 中count 的和

  • 以下回答由chatgpt基于相关博客总结生成:

    根据参考资料和问题要求,我会给出一个具体的解决方案。

    首先,我们需要对list>和list进行过滤,找出key与list中元素相同的value。可以按照如下步骤操作:

    1. 将list>转换为List>类型。可以使用参考资料中的段落1的方法,即使用JSON库进行转换。 示例代码如下:
    List<Map<String, Object>> mapList = JSON.parseObject(JSON.toJSONString(listMap), new TypeReference<List<Map<String, Object>>>(){});
    
    1. 对转换后的mapList进行流操作,筛选出key与list中元素相同的value。可以使用参考资料中的段落6的方法,利用filter和findAny来查找符合条件的元素。 示例代码如下:
    List<Object> filteredValues = mapList.stream()
        .filter(map -> list.contains(map.get("key")))
        .map(map -> map.get("value"))
        .collect(Collectors.toList());
    
    1. 最后得到的filteredValues就是符合条件的元素值。可以根据需求进行进一步处理或输出。

    需要注意的是,上述代码中的"key"和"value"需要替换为实际的key和value字段名称。

    希望我的回答对你有帮助。如果还有其他问题,请随时提问。