从对象列表到基于Java8或Guava将对象及其键和值分组

从对象列表到基于Java8或Guava将对象及其键和值分组,java,lambda,java-8,guava,Java,Lambda,Java 8,Guava,我期待着将列表转换为地图 List到map的地图我想你就在附近。我只想: Map<String, List<Element>> map = elements.stream() .collect(Collectors.groupingBy(e -> ((EmpKey) e.getObjectKey()).getTenantId())); Map Map=elements.stream() .collect(Collectors.groupingBy(e->(

我期待着将列表转换为地图


List
map的地图我想你就在附近。我只想:

Map<String, List<Element>> map = elements.stream()
    .collect(Collectors.groupingBy(e -> ((EmpKey) e.getObjectKey()).getTenantId()));
Map Map=elements.stream()
.collect(Collectors.groupingBy(e->((EmpKey)e.getObjectKey()).getTenantId());

我想你就在附近。我只想:

Map<String, List<Element>> map = elements.stream()
    .collect(Collectors.groupingBy(e -> ((EmpKey) e.getObjectKey()).getTenantId()));
Map Map=elements.stream()
.collect(Collectors.groupingBy(e->((EmpKey)e.getObjectKey()).getTenantId());

您真的想在这里使用
多重映射。它基本上是一个键到值集合的映射,有关更详细的描述,请阅读

在您的情况下,您可以使用完全符合您要求的方法:

ListMultimap<String, Element> multimap =
    Multimaps.index(elements, e -> ((EmpKey) e.getObjectKey()).getTenantId());

// get your elements under a key:
List<Element> elements = multimap.get("someTenantId");

// view Multimap as plain Map
Map<String, Collection<Element>> mapOfCollections = multimap.asMap();
Map<String, List<Element>> mapOfLists = Multimaps.asMap(multimap);
ListMultimap多重映射=
索引(元素,e->((EmpKey)e.getObjectKey()).getTenantId());
//将元素置于一个键下:
List elements=multimap.get(“sometentatid”);
//将多重贴图视为普通贴图
mapOfCollections=multimap.asMap();
Map MapOfList=Multimaps.asMap(multimap);

如果不使用番石榴,您可以使用,请参阅Federico Peralta Schaffner的答案。

您确实想在此处使用
多地图(更具体地说)。它基本上是一个键到值集合的映射,有关更详细的描述,请阅读

在您的情况下,您可以使用完全符合您要求的方法:

ListMultimap<String, Element> multimap =
    Multimaps.index(elements, e -> ((EmpKey) e.getObjectKey()).getTenantId());

// get your elements under a key:
List<Element> elements = multimap.get("someTenantId");

// view Multimap as plain Map
Map<String, Collection<Element>> mapOfCollections = multimap.asMap();
Map<String, List<Element>> mapOfLists = Multimaps.asMap(multimap);
ListMultimap多重映射=
索引(元素,e->((EmpKey)e.getObjectKey()).getTenantId());
//将元素置于一个键下:
List elements=multimap.get(“sometentatid”);
//将多重贴图视为普通贴图
mapOfCollections=multimap.asMap();
Map MapOfList=Multimaps.asMap(multimap);

如果不使用番石榴,您可以使用,请参阅Federico Peralta Schaffner的答案。

您已经考虑过使用番石榴替换
MapI阅读完您的“问题”-但是我不明白您的要求。请编辑它并添加您的问题。我如何进行分组,因为map的键是tenantId,它是EmpKey的一个属性。EmpKey是Element@Robert我对我的问题做了一些编辑,我正在尝试的是,我希望在体面的编码标准中做到这一点,save是以某种方式做到这一点的要求。这是我刚刚编辑的Ehcache的一部分,因为您已经考虑使用Guava replace
MapI阅读完您的“问题”-但是我错过了您的要求。请编辑它并添加您的问题。我如何进行分组,因为map的键是tenantId,它是EmpKey的一个属性。EmpKey是Element@Robert我对我的问题做了一些编辑,我正在尝试的是,我希望在体面的编码标准中做到这一点,save是以某种方式做到这一点的要求。这是我刚刚编辑的Ehcache的一部分,目的是简化它
//List<Element> to a map of Map<String,List<Element>

// where Map key String is tenantId which is in EmpKey
elements.stream().collect(Collectors.groupingBy(Element::getObjectKey))

I have to cast groupingBy(Element::(EmpKey)getObjectKey.getTenantId))
Map<String, List<Element>> map = elements.stream()
    .collect(Collectors.groupingBy(e -> ((EmpKey) e.getObjectKey()).getTenantId()));
ListMultimap<String, Element> multimap =
    Multimaps.index(elements, e -> ((EmpKey) e.getObjectKey()).getTenantId());

// get your elements under a key:
List<Element> elements = multimap.get("someTenantId");

// view Multimap as plain Map
Map<String, Collection<Element>> mapOfCollections = multimap.asMap();
Map<String, List<Element>> mapOfLists = Multimaps.asMap(multimap);