Collectors.toMapの第1引数のFunctionにSupplierを指定してもエラーにならないのはなぜか
Q&A
Closed
解決したいこと
Java Goldの参考書を真似てコーディングしています。
以下のCollectors.toMapの第1引数にFunctionではなくSupplierを指定しています。エラーにならない。なぜか教えてほしいです。
実際のソースは下記を参照願います。
public static <T,K,U> Collector<T,?,Map<K,U>> toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper)
該当するソースコード
class Value {
int price;
String name;
public Value(int price, String name) {
this.price = price;
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getName() { //引数なしリターンありのためSupplierの認識
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "price:" + price + " name:" + name;
}
}
public class Outer {
public static void main(String[] args) {
List<Value> l = Arrays.asList(
new Value(1,"andy"),
new Value(2,"john"),
new Value(3,"laula"),
new Value(4,"miki"),
new Value(5,"sally"));
Stream<Value> st = l.stream();
Map<String, Value> mp = st.collect(Collectors.toMap(
Value::getName, //本来FunctionのところSupplierを指定
b -> b));
mp.keySet().stream().forEach(System.out::println);
mp.keySet().stream().forEach(a -> System.out.println(mp.get(a)));
}
}
0