【问题标题】:From a List<String> to a Map<Label, PasswordField> using java 8使用 java 8 从 List<String> 到 Map<Label, PasswordField>
【发布时间】:2018-07-24 21:59:36
【问题描述】:

是否可以使用流和收集器生成 HashMap? 我试过类似的东西:

 myList.stream()
.map(Label::new)
.collect(Collectors.toMap(Function.identity(), PasswordField::new))

但它显然不起作用,我尝试了其他解决方案,但没有成功。 你有什么建议吗?

【问题讨论】:

  • 附注,使用Label 作为键是危险的。 HashMap 应该有不可变的键,而 Label 不是一个。

标签: javafx arraylist java-8


【解决方案1】:

PasswordField 类只有一个默认构造函数,这意味着PasswordField::new 将不起作用,因为它等效于(Label l) -&gt; new PasswordField(l)。相反,值映射器应该是 (Label l) -&gt; new PasswordField() 或只是 l -&gt; new PasswordField();

【讨论】:

  • ...这导致了一个问题,为什么Label 是在map 步骤而不是在toMap 收集器中创建的,即myList.stream() .collect(Collectors.toMap(Label::new, s -&gt; new PasswordField()))...
【解决方案2】:

正如 Aomine 正确提到的,PasswordField 有一个默认构造函数,因此,您的代码中提到的PasswordField::new 将不起作用。请改用l -&gt; new PasswordField()

myList.stream()
    .map(Label::new)
    .collect(Collectors.toMap(Function.identity(), l -> new PasswordField()));

【讨论】:

  • 抱歉坦白说,除了青峰的回答,你没有添加任何有用的东西。
猜你喜欢
  • 2018-08-02
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多