当前位置: 首页 > 知识库问答 >
问题:

Java 8列表成图

令狐新翰
2023-03-14

我想用Java 8的streams和lambdas将一个对象列表翻译成一个地图。

这就是我在Java福音7章及以下的写法。

private Map<String, Choice> nameMap(List<Choice> choices) {
        final Map<String, Choice> hashMap = new HashMap<>();
        for (final Choice choice : choices) {
            hashMap.put(choice.getName(), choice);
        }
        return hashMap;
}

我可以很容易地使用Java 8和番石榴,但我想知道如何做到这一点没有番石榴。

在番石榴中:

private Map<String, Choice> nameMap(List<Choice> choices) {
    return Maps.uniqueIndex(choices, new Function<Choice, String>() {

        @Override
        public String apply(final Choice input) {
            return input.getName();
        }
    });
}

番石榴配Java 8只羊羔肉。

private Map<String, Choice> nameMap(List<Choice> choices) {
    return Maps.uniqueIndex(choices, Choice::getName);
}

共有3个答案

钱劲
2023-03-14

使用getName()作为键,choice本身作为映射的值:

Map<String, Choice> result =
    choices.stream().collect(Collectors.toMap(Choice::getName, c -> c));
葛承嗣
2023-03-14

如果不能保证您的键对于列表中的所有元素都是唯一的,则应将其转换为map 而不是map

Map<String, List<Choice>> result =
 choices.stream().collect(Collectors.groupingBy(Choice::getName));
茹高义
2023-03-14

基于收集器文档,它非常简单:

Map<String, Choice> result =
    choices.stream().collect(Collectors.toMap(Choice::getName,
                                              Function.identity()));
 类似资料:
  • 问题内容: 我正在尝试合并流列表并对其进行处理。 在这里,我得到b的几个列表。 但是,我只想将我的所有b收集在一个列表中。有任何想法吗 ? 问题答案: 这就是flatMap的用途:

  • 我有这样的东西: 现在,我想在Java8中使用新的流过滤器API: 我对getFilteredRes_NEW()的问题是:

  • 问题内容: 我有一个带有以下签名的类: 我想要一个来自a 的键,该键将是该类的名称。我如何使用java8流按es名称对列表进行分组?所有es在名称上都是唯一的。 可以在单个流中求解,还是应该以某种方式拆分它还是采用经典解决方案? 问题答案:

  • 我试图使用

  • 我有一个订单列表,我想使用Java8Stream和Collectors按用户分组。GroupingBy: 这将返回包含用户和订单列表的映射: 我不需要整个对象User,只需要它的username字段,它是一个字符串,所以我想获得如下内容: 我试图使用stream.map将用户映射到username字段,但无法正确实现。我怎样才能尽可能简单地做到这一点呢?

  • 我想确定一个列表是否是字谜,或者是否使用Java8。 示例输入: 我已经编写了以下函数来完成这项工作,但我想知道是否有一个更好和优雅的方法来做到这一点。 似乎我不能用方法对char数组排序,所以我使用了第二个map运算符。如果有某种方法,我可以直接操作char流,而不是char数组的流,这也会有所帮助。

  • 我的问题基本上归结为将列表减少为链表,但从reduce函数推断出的类型似乎不正确。 我的列表如下所示 我希望reduce函数在每个reduce步骤中都能做到这一点 然而,减少函数似乎认为这不起作用,因为我猜它不认为身份是节点。 这是我的密码。 我做错了什么? 在接受答案后编辑,我的代码如下所示: 现在打印出来了 我仍然不知道为什么Java不能告诉减少函数的第三个参数是不必要的,它永远不会被调用,但

  • 我想知道,如何在Java8中使用流API迭代多级列表 根据Java8,我应该做如下的操作 我想要流利地做这件事(使用内部迭代)。任何解释都会很感激。