【问题标题】:How to convert List<xxxx> into Map<primarykey of xxxx, xxxx> without iterate list in java?如何将 List<xxxx> 转换为 Map<primarykey of xxxx, xxxx> 而无需在 java 中迭代列表?
【发布时间】:2016-03-02 11:51:27
【问题描述】:
List<Student> list = fromStudentTable();
Map<Integer,Student> map = new HashMap<Integer,Student>();
for (Student i : list) {
    map.put(i.getDbid(),i);
}

现在我想在没有迭代列表或任何插件(如谷歌番石榴)中的任何方法的情况下隐藏列表以映射......

【问题讨论】:

  • 你可以使用java 8 lamda函数。
  • 请尝试展示您的尝试。
  • 好吧,总得有人来做迭代。您只能将其隐藏在某些库函数后面。
  • @Thilo 我认为他想要内部迭代,所以他需要一个带有 Stream 的 sn-p,就像当前的最佳答案一样。

标签: java list dictionary


【解决方案1】:

您可以使用 Java 8 流:

Map<Integer,Student> map = 
    list.stream()
        .collect(Collectors.toMap(Student::getDbid,
                                  s -> s));

这会将 List 转换为 Map,其中原始 List 的每个元素都成为 Map 的条目(其中 getDbid() 是键,Student 是值)。

【讨论】:

  • 这个构造不只是隐藏迭代,而是在内部进行迭代吗?
  • @Xvolks 当然,必须迭代列表才能处理此 Stream。任何将 List 转换为 Map 的代码都必须遍历 List。
  • 我不确定这种构造与 OP 构造相比的优势。
【解决方案2】:

你也可以这样做,

List<Student> list;
Map<TypeofPrimaryKey, Student> map = list.toMap(c-> c.getPrimaryKey(),c->c);

【讨论】:

  • 对不起,这是关于 ArrayList/LinkedList 或其他要显示的内容,实际上是 'XList' 我错误地将 X 放在了末尾
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
相关资源
最近更新 更多