Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL连接类分组列表_Java_Lambda_Java 8 - Fatal编程技术网

Java SQL连接类分组列表

Java SQL连接类分组列表,java,lambda,java-8,Java,Lambda,Java 8,我有两个列表,如果表示相同的字段等于,我想对它们进行分组,我想知道是否有办法在lambdas或streams中进行分组 假设我们有一个包含容器信息的列表 container1-> containerInfo container2-> containerInfo 然后我们有另一个列表,表示容器中的元素和容器名称 element1 -> container1 + elementInfo element2 -> container1 + elementInfo element

我有两个列表,如果表示相同的字段等于,我想对它们进行分组,我想知道是否有办法在lambdas或streams中进行分组

假设我们有一个包含容器信息的列表

container1-> containerInfo
container2-> containerInfo
然后我们有另一个列表,表示容器中的元素和容器名称

element1 -> container1 + elementInfo
element2 -> container1 + elementInfo
element3 -> container2 + elementInfo
element4 -> container2 + elementInfo
有一种方法,我可以通过组件连接两个列表给定的条件,这两个都是不同的类,而且我需要两个列表中的某些信息,最后我想要这样的东西

Map<Integer,List<ContainetElementMap>> map;

我知道有一个groupBy,这可能会有所帮助,但只有当两个对象的类型相同时,它才起作用,我需要一些类似于sql在表之间进行连接的东西,请尝试这种方法。我使用set而不是list和其他点,您需要从映射中筛选出不带元素的值:

Map<Integer, Set<Elem>> m = containers.stream()
            .collect(
                    Collectors.groupingBy(
                        Container::getId,
                        Collectors.flatMapping(
                                container -> elems.stream().filter(elem -> elem.containerId == container.id),
                                Collectors.toSet())
                 )
    );
和要素:

class Elem {
    Integer id;
    Integer containerId;
    String name;

    public Elem(Integer id, Integer containerId, String name) {
        this.id = id;
        this.containerId = containerId;
        this.name = name;
    }
 }

我实现了你提到的方法,我认为Collectors.flatMapping不存在,我更改为mapping,但抛出了一个错误,它返回给我一个Integer,Set而不是Integer,Set的映射,你知道如何解决这个问题吗?@jam,抱歉忘了提到我使用了Java 9,这是收集器中的新方法。在Java8中有一种方法可以做到这一点?您现有的类是什么样子的?您使用
groupingBy
尝试了什么?
class Container {
    Integer id;

    public Container(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }
}
class Elem {
    Integer id;
    Integer containerId;
    String name;

    public Elem(Integer id, Integer containerId, String name) {
        this.id = id;
        this.containerId = containerId;
        this.name = name;
    }
 }