class MyClass {
String field;
public MyClass(String field) {
this.field = field;
}
public String getField() {
return field;
}
}
public static void main(String[] args) {
Map<String, List<MyClass>> map = new HashMap<>();
map.put("one", Arrays.asList(new MyClass("one1"), new MyClass("one2")));
map.put("two", Arrays.asList(new MyClass("two1"), new MyClass("two2")));
Map<String, List<String>> map2 = map.entrySet().stream()
// собираем из исходной
// карты новую карту
.collect(Collectors.toMap(
// ключ такой же
k -> k.getKey(),
// значение - из листа объектов
// получаем лист строк
v -> v.getValue().stream()
// получаем значение
// поля объекта
.map(MyClass::getField)
// собираем обратно в лист
.collect(Collectors.toList())));
System.out.println(map2); // {one=[one1, one2], two=[two1, two2]}
}
public static void main(String[] args) {
Map<String, List<Object>> map = new HashMap<>();
map.put("one", Arrays.asList(new MyClass("one1"), new MyClass("one2")));
map.put("two", Arrays.asList(new MyClass("two1"), new MyClass("two2")));
map.forEach((key, list) ->
IntStream.range(0, list.size()).forEach(i ->
// получаем значение поля объекта
// и заменяем им сам объект
list.set(i, ((MyClass) list.get(i)).getField())));
System.out.println(map); // {one=[one1, one2], two=[two1, two2]}
}
从对象列表中获取字符串列表
转换
Map<String, List<MyClass>>
为Map<String, List<String>>
:如果我们有
List<Object>
,那么就不需要采集新的地图了,可以转换现有的,也就是替换sheet中的值:这是一个更直接和粗略的版本
forEach
:结论: