首先新建一个实体类Person
@Data
public class Person {
/** 编码 */
private String code;
/** 名字 */
private String name;
public Person(String code, String name) {
this.code = code;
this.name = name;
}
}
实例化三个对象放入list集合中
public static void main(String[] args) {
Person person1 = new Person("001", "张三");
Person person2 = new Person("002", "李四");
Person person3 = new Person("002", "王五");
List<Person> personList = new ArrayList<>();
personList.add(person1);
personList.add(person2);
personList.add(person3);
personList.forEach(t -> System.out.println(t.toString()));
}
输出结果为:
Person(code=001, name=张三)
Person(code=002, name=李四)
Person(code=002, name=王五)
1.抽取对象的code作为key,name作为value转化为map集合
方法为
private static HashMap<String, String> listToMap(List<Person> personList) {
return (HashMap<String, String>)personList.stream()
.filter(t -> t.getName()!=null)
.collect(Collectors.toMap(Person::getCode,Person::getName,(k1,k2)->k2));
}
filter() 方法作用是过滤掉名字为空的对象,当对象的名字为null时,会出现NPE空指针异常
(k1,k2)->k2 意思是遇到相同的key时取第二个值
(k1,k2)->k1 意思是遇到相同的key时取第一个值
调用这个方法
HashMap<String,String> personMap = listToMap(personList);
personMap.forEach((k,v)-> System.out.println(k.toString() + " - " + v.toString()));
输出结果为:
001 - 张三
002 - 王五
2.抽取对象的name得到name的list集合
方法为
private static List<String> getNameList(List<Person> personList) {
return personList.stream().map(Person::getName).collect(Collectors.toList());
}
调用这个方法
List<String> nameList = getNameList(personList);
nameList.forEach(t -> System.out.println(t.toString()));
输出结果为:
张三
李四
王五