转换列表时遇到错误
我可以做一个传统的代码,但我得到一个错误,而做使用Java8流,忽略重复的键。
等效代码:
Map<String, Field> uniqueFields = new HashMap<>();
for (Field field : allFields) {
uniqueFields.put(field.getName(), field);
}
在流下尝试,但存在语法错误:
java prettyprint-override">Map<String, Field> uniqueFields1 = allFields.stream()
.collect(Collectors.toMap(
Field::getName,
(oldValue, newValue) -> oldValue));
收藏家的味道。应该为需要两个参数的toMap()提供函数:keyMapper和valueMapper(分别负责从流元素中删除键和值)。
但是在您的代码片段中,第二个参数的类型不是Function,因为您提供了两个参数oldValue和newValue,但Function只接受一个。
除了keyMapper和valueMapper函数需要第三个参数BinaryOperator,您需要使用一个版本的toMap,该参数用于解析映射到同一个键的值:
Map<String, Field> uniqueFields = allFields.stream()
.collect(Collectors.toMap(
Field::getName, // generating a kay
Function.identity(), // generating a value
(oldValue, newValue) -> oldValue))); // resolving duplicates
您只需要为toMap函数添加一个参数,告诉收集器Map的值应该是什么。您可以使用函数。identity(),这意味着它将直接通过字段。
Map<String,Field> uniqueFields = allFields.stream()
.collect(Collectors.toMap(Field::getName, Function.identity(),
(oldValue,newValue) -> oldValue));
我有一张这样的地图<代码>地图 我使用了对象映射器,但它不工作,因为映射在我的结构中包含另一个映射。
我是Mapstruct的新手。我试图将列表转换为地图,我在网上搜索了很多,我有一些解决方案,比如它还没有在mapstruct中实现。如果有人能提供一些替代解决方案,我将很高兴。所有我希望转换映射如下: 现在是否可以使用MapStruct来实现?
假设我有一个名为student的对象列表。对象Student的定义如下 在学生列表中,可以有多个具有相同studentName但不同CourseTaking的学生对象。现在我想把学生名单变成一张studentName和courseTaking的地图,如下所示 关键是studentName,而值是将同一学生的所有课程设置放在一起作为一个集合。我如何使用stream()&collection()来实现
我正在尝试使用stream将列表转换为哈希映射。这是我的代码。。 现在我想添加一个条件,若我得到属性名为null,那个么应该将项添加到带有空字符串的映射中,如下所示(任意_attributeName,“”)。 如何使用流操作实现这一点。我知道我可以使用过滤条件检查属性名是否为null,但如果为null,我可以添加空白字符串吗。有可能吗?如果没有,为什么?请帮忙。
我有下面的pojo 此employee类用于从mybatis orm获取对象列表(list)。 mybatis将输出作为列表返回,因为mybatis不支持将Map作为返回类型 我必须把它转换成地图 我尝试了下面的方法,但没有成功,因为它需要getName()和getId()方法 请告知是否有一种方法可以在不修改员工pojo的情况下使用stream实现。 注意:我知道我们可以使用ofr或for ea
我有一个包含子对象列表的类,如下所示: 我有一个学生类列表,如下所示: 我可以使用传统的foreach循环对数据进行分组,但我想为此使用stream API,但不能这样做。你能帮忙吗?