map 是 转化的意思,
1.将一个类转化为另一个类
例如这里有两个实体类 一个是 animal 一个是 toy
@Data
@AllArgsConstructor
public class Animal {
private String name;
private Integer age;
}
@Data
public class Toy {
private String name;
}
初始化一个 animal的list
List<Animal> animals = Lists.newArrayList ();
animals.add (new Animal ("cat",12));
animals.add (new Animal ("dog",20));
animals.add (new Animal ("wolf",5));
先来一个简单的例子,将提取animal 的一个属性将 List<Animal> map 成 List<String>
List<String> nameList = animals.stream().map(t-> t.getName()).collect(Collectors.toList());
System.out.println(nameList);
结果
[cat, dog, wolf]
将 List<Animal> map 成 List<Toy>
List<Toy> toys = animals.stream().map(t-> {
Toy toy = new Toy();
toy.setName(t.getName());
return toy;
}).collect(Collectors.toList());
System.out.println(toys);
结果
[Toy(name=cat), Toy(name=dog), Toy(name=wolf)]
在java web 应用中经常会将从数据库中查到的 entity 转变成vo 类,应用此方法就挺方便。
将list 转化为 map
Map<String,Animal> animalMap = animals.stream().collect(Collectors.toMap(t->t.getName(), t->t));
System.out.println(animalMap);
{wolf=Animal(name=wolf, age=5), cat=Animal(name=cat, age=12), dog=Animal(name=dog, age=20)}
倘若map的主键重名会报如下错误
java.lang.IllegalStateException: Duplicate key
可以结合业务需求,这里如果重复了返回第一个
Map<String,Animal> animalMap = animals.stream()
.collect(Collectors.toMap(t->t.getName(), t->t,(x,y)->x));
``