我有一个HashMap
值,我想通过将流与Cat
一起使用来变成Cat::new
对象。问题在于构造函数期望String
,Integer
,并且在流中我们有Entry<String,Integer>
。有没有办法以某种方式使用Cat::new
?
package com.zetcode;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Stream;
public class ConstructorReferenceEx2 {
public static void main(String[] args) {
Map<String, Integer> values = new HashMap<>();
values.put("Ollie", 3);
values.put("Finn", 4);
values.put("Teddy", 6);
values.put("Jasper", 1);
values.put("Lucky", 2);
Stream<Cat> cats = values.entrySet().stream().map(Cat::new);
cats.forEach(System.out::println);
}
}
Cat
的构造函数接受两个属性:
package com.zetcode;
import java.util.StringJoiner;
public class Cat {
private String name;
private Integer age;
public Cat(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return new StringJoiner(", ", Cat.class.getSimpleName() + "[", "]")
.add("name='" + name + "'")
.add("age=" + age)
.toString();
}
}