// given a set of Item objects, group them by the managers of creator and owners
Map<String, List<Item>> managersItems =
itemSet.parallelStream().flatMap(item -> {
// get the list of the creator and owners
List<String> users = new ArrayList();
users.add(item.getCreator());
users.addAll(item.getOwners());
return Stream.of(users.toArray(new String[] {})).map(user -> {
LdapUserInfo ldapUser = LdapUserInfoFactory.create(user);
String manager = ldapUser.getManager();
return new AbstractMap.SimpleImmutableEntry<String, Item(manager, item);
});
}).collect(
Collectors.groupingBy(Map.Entry::getKey, Collectors.mapping(Map.Entry::getValue, Collectors.toList())));
此代码在日食火星中编译良好,但在日食月神中获得以下错误:
类型不匹配:无法从< code >映射转换
如果我没有将返回的分配给具有< code>Map的< code>Map
类型Map。条目
未定义此处适用的getKey(Object)
。
我做错了什么?
我能够从米沙的答案中得出这个解决方案。这是与日食月神Java编译器一起使用的
Map<String, List<Item>> managersItems = itemSet
.stream()
.<Map.Entry<String, Item>> flatMap(item -> {
return Stream.concat(Stream.of(item.getCreatorLogin()), item.getOwners().stream()).map(
user -> {
LdapUserInfo ldapUser = LdapUserInfoFactory.create(user);
String manager = ldapUser.getManagerLoginName();
return new AbstractMap.SimpleEntry<String, Item>(manager, info);
});
})
.collect(Collectors.groupingBy(Map.Entry<String, Item>::getKey,
Collectors.mapping(Map.Entry<String, Item>::getValue,
Collectors.toList())));
你没有做错任何事。Eclipse编译器在导致这些问题的类型推断方面存在问题。如果Luna兼容性很重要,则必须向lambda表达式添加显式类型。例如,尝试Map.Entry::
另一方面,没有必要将< code>List
转换为array来对其进行流处理。可以直接调用< code>users.stream()。但是甚至创建< code>List也不是必须的。可以使用< code > stream . concat(stream . of(item . get creator()),item.getOwners()。stream())取而代之(当然,这有点笨拙)。
最后(也是最重要的),避免对阻塞代码使用parallelStream
,例如在外部系统中查找数据。并行流旨在处理CPU限制的任务。
我有以下两门课: : : 我希望进行流操作,以便: 将映射到中的 的和分别合并到和中,对于所有具有相同id的s 为此,我编写了以下一段代码: 它的工作和输出如下: 但我相信有一种更好的方式可以达到同样的效果。任何一个指针都很好。
我有以下情况。(伪代码) 我想知道如何将列表os转换为->Bs的映射
我有一个班级排,比如: a类统计数据: 我有一个行列表 我需要把它转换成一个按id1和id2分组的映射,我需要度量数据以这种形式汇总成Stats对象 我正在使用java stream生成这个,但仍停留在这一点上: 如何将列表转换为另一个对象,该对象包含该列表中所有对象的总和? 还有一种方法可以使用java stream将上述形式的两个输出映射合并为第三个输出映射吗? 例如:- 输入:行列表 结果:
我正在从文件中读取值并获取列表。如下- 一旦我得到这个
我在迭代一个对象内的列表时遇到了一个问题,该对象内嵌在另一个映射中。我的目标是迭代这个列表并生成一个映射 ,我希望使用streams和lamdas来实现这一点。 我在上面看到了,我需要通过迭代FolderBo中的elementList从elementBo创建一个带有map 的映射。folderBo本身就在Modelbo的地图内。
给定以下类的,使用Java 8 lambda,我希望获得的,每个帐户类型一个。 到目前为止,我使用以下代码按对进行分组。 如何返回,将列表从每个映射键传递到构造函数中,其中包含每个中的一个?