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

如何将字符串列表转换为具有流的映射

云隐水
2023-03-14

我必须转换一个列表List

map的键必须是列表中的字符串,并且所有键的每个值都必须为0(零)。

如何转换此值?

我尝试过:

List<String> list = List.of("banana", "apple", "tree", "car");

Map<String, Float> map = list.stream()
    .distinct()
    .collect(Collectors.toMap(String::toString, 0f));

共有2个答案

胡曾笑
2023-03-14

另一种方法是在不使用流的情况下执行相同的操作。

Map<String,Float> map = new HashMap<String, Float>();       
list.forEach(s-> map.computeIfAbsent(s,v->0f));
樊烨烨
2023-03-14
匿名用户

如果需要将每个键与0相关联,则toMap()的第二个参数需要是返回0的函数,而不是返回0的值:

Map<String, Float> map = list.stream()
    .collect(Collectors.toMap(
        Function.identity(),  // extracting a key
        str -> 0f,            // extracting a value
        (left, right) -> 0f   // resolving duplicates
    ));

此外,无需使用distinct()。在后台,它将创建一个LinkedHashSet来消除重复,如果大多数流元素都是唯一的,并且数据集是海量的,那么它可能会显著增加内存消耗。

相反,我们可以在映射中处理它们。为此,我们需要添加第三个参数mergeFunction

对于已经是字符串的流元素,无需调用toString()方法来提取字符串类型的键。在这种情况下,我们可以使用函数。identity()表示不需要转换。

 类似资料:
  • 问题内容: 如何使用Python将列表转换为字符串? 问题答案: 通过使用 或者,如果列表是整数,则在连接元素之前将其转换。

  • 问题内容: 我想获取一串字符串并将其转换为单词对流。例如: 我有: 我想要:。 这几乎与Zipping相同,如使用带有Lambda的JDK8的Zipping流中概述的那样(java.util.stream.Streams.zip) 但是,这会产生: 以下代码有效,但显然是错误的方法(不是线程安全的等): 问题答案: 如果你: 不喜欢使用流中所有字符串创建列表的想法 不想使用外部库 喜欢弄脏你的手

  • 更正:正如你们所指出的,我使用的是Java7。现在,方法就在那里。但问题仍然适用: 如何从字符串中获取?

  • 很抱歉重复了这个问题,但我的问题是其他的。我有一个从json-string解析到map的JSON解析器方法。但是json-string有一个值,这个值也是json-string。大概是这样的: 因此,我的解析方法: 我在客户端得到响应: ?但是随后我得到一个错误,IDE告诉我,是一个字符串。 那么,我如何用我的UserData获得这个LinkedHashMap呢?对不起,为了我的英语。谢谢你。

  • 我有字符串列表 我需要将该列表转换为字符串,如下所示: 我想获取的字符串是: 如果 那么我只需要 如果,那么我需要。 有没有可能以一种灵活的方式做到那一点,并且避免编写多个? UPD:我在

  • 这个问题的范围是JSON处理的JavaAPI(JSR 353)。 给定一个元素为JsonString的JsonArray,我如何轻松地将其转换为