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