在Intellij 15.0.3中。并且使用Java8我在使用::new
时遇到问题。
特别是,我有一个带有默认构造函数的类
public class Container{
public Container(){}
}
我想从列表中创建一个地图,如下所示:
public class Test{
private final Map<Key, Container> map;
@Before
public void setUp(){
List<Key> keys=...//Init the list
map = keys.stream().collect(Collectors.toMap(Function.identity(), Container::new));
}
}
在Intellij中,new
为红色,工具提示显示为cannot resolve constructor Container
如果我() -> {new Container()}
我也有cannot infer functional interface type Container
知道为什么吗?
答案 0 :(得分:3)
每个映射函数都应该接受Key
参数。 Function.identity()
可以,但Container::new
不带参数。与() -> new Container()
相同。你需要一个单参数lambda。你会忽略的一个论点,正如它发生的那样。
map = keys.stream().collect(Collectors.toMap(Function.identity(), key -> new Container()));
答案 1 :(得分:-3)
应该是这样的:
Collectors.toMap(Container::getMyUniqueField, Function.identity())
这将在创建的hashmap中使用getter作为键,并将对象本身作为值。