使用Java8 streams,我希望将列表转换为映射,如Java8 list
Map<String, Choice> result =
choices.stream().filter((choice) -> choice.getName() != null).collect(Collectors.toMap(Choice::getName,
Function.<Choice>identity());
以下是您想要的自定义收集器:
public class FilteredKeyCollector<T, K, V> implements Collector<T, Map<K, V>, Map<K, V>> {
private final Function<? super T,? extends K> keyMapper;
private final Function<? super T,? extends V> valueMapper;
private final Predicate<K> keyFilter;
private final EnumSet<Collector.Characteristics> characteristics;
private FilteredKeyCollector(Function<? super T,? extends K> keyMapper, Function<? super T,? extends V> valueMapper, Predicate<K> keyFilter) {
this.keyMapper = keyMapper;
this.valueMapper = valueMapper;
this.keyFilter = keyFilter;
this.characteristics = EnumSet.of(Collector.Characteristics.IDENTITY_FINISH);
}
@Override
public Supplier<Map<K, V>> supplier() {
return HashMap<K, V>::new;
}
@Override
public BiConsumer<Map<K, V>, T> accumulator() {
return (map, t) -> {
K key = keyMapper.apply(t);
if (keyFilter.test(key)) {
map.put(key, valueMapper.apply(t));
}
};
}
@Override
public BinaryOperator<Map<K, V>> combiner() {
return (map1, map2) -> {
map1.putAll(map2);
return map1;
};
}
@Override
public Function<Map<K, V>, Map<K, V>> finisher() {
return m -> m;
}
@Override
public Set<Collector.Characteristics> characteristics() {
return characteristics;
}
}
并使用它:
Map<String, Choice> result = choices.stream()
.collect(new FilteredKeyCollector<>(
Choice::getName, // key mapper
c -> c, // value mapper
k -> k != null)); // key filter
我是Mapstruct的新手。我试图将列表转换为地图,我在网上搜索了很多,我有一些解决方案,比如它还没有在mapstruct中实现。如果有人能提供一些替代解决方案,我将很高兴。所有我希望转换映射如下: 现在是否可以使用MapStruct来实现?
我有一张这样的地图<代码>地图 我使用了对象映射器,但它不工作,因为映射在我的结构中包含另一个映射。
我使用静态编程语言反射来检查具有特定注释的属性是否为空。 给出以下示例: 以及检查它的函数: 这个想法是,函数将迭代我的类的属性,检查它们是否有注释,并检查值是否为空。如果属性是一个数据类,代码会递归地计算Childs的属性。 之后,我映射结果,将KProperty转换为一个简单的字符串,该字符串可供人阅读,包含类名和属性名。 问题是上面的代码没有按预期工作。返回的属性只是来自第一级类的属性。 如
假设我有一个名为student的对象列表。对象Student的定义如下 在学生列表中,可以有多个具有相同studentName但不同CourseTaking的学生对象。现在我想把学生名单变成一张studentName和courseTaking的地图,如下所示 关键是studentName,而值是将同一学生的所有课程设置放在一起作为一个集合。我如何使用stream()&collection()来实现
我有以下代码,希望使用Java8将列表转换为。 当我尝试将列表中的单个值映射为映射的键时,我得到了一个错误。
我有下面的pojo 此employee类用于从mybatis orm获取对象列表(list)。 mybatis将输出作为列表返回,因为mybatis不支持将Map作为返回类型 我必须把它转换成地图 我尝试了下面的方法,但没有成功,因为它需要getName()和getId()方法 请告知是否有一种方法可以在不修改员工pojo的情况下使用stream实现。 注意:我知道我们可以使用ofr或for ea