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

使用 Java 8 流的字符串数组长度的总和

洪国兴
2023-03-14

我写了这段无法编译的代码:

String[] text = {"hello", "bye"};
IntStream.of(Arrays.stream(text).map(String::length)).sum()

我需要将流转换为IntStream吗?为什么当我将<code>String::length</code>传递给<code>map()</code>函数时会出现错误?

共有3个答案

殳经略
2023-03-14

我需要将流转换为IntStream吗?

好吧,你不需要为了找到所有字符串的总长度,但是为了性能的原因,这样做更好。

为什么当我将 String::length 传递给 map() 函数时会出现错误?

如果您将方法引用更改为lambda,您会更好地发现问题所在。即

 IntStream.of(Arrays.stream(text).map(e -> e.length())).sum();

现在,不仅在< code>map函数附近有一条曲线,在< code>IntStream.of方法下也有一条曲线。将鼠标悬停在IDE上的< code>of方法上后,我得到消息:

< code > "无法解析(java.util.stream.Stream)的方法

现在,这告诉我们,我们将错误的东西传递给了 of 方法。of 方法有两个重载:

(整数…值)

of(int t)

如您所见,这两个方法期望传递一组值或传递单个值,类型为< code>int。

显然,<code>IntStream。方法不是我们的朋友,在这种情况下,我们会希望:

int length = Arrays.stream(text) // Stream<String>
                   .mapToInt(String::length)  //IntStream
                   .sum(); // int

这种方法只是将每个字符串映射到它的长度,然后将它们相加。

单于经纬
2023-03-14

试试这个

Arrays.stream(text)
      .filter(Objects::nonNull)
      .mapToInt(String::length)
      .reduce(0,Integer::sum);
乌鸿宝
2023-03-14

您应该使用< code>Stream.mapToInt来获取< code>IntStream实例:

String[] text = {"hello", "bye"};
int total = Arrays.stream(text).mapToInt(String::length).sum();
 类似资料:
  • 如果我有一个< code>ArrayList的单词,比如: 我想计算 4 5 6 3 3 3 作为 中每个字符串的长度之和加上单词之间的 5 个空格。我该怎么做?

  • 问题内容: 与使用循环相比,在Python中是否有一种更惯用的方式来计算字符串长度? 我试过了,但只适用于整数: 问题答案: 我知道这是一个老问题,但是我不禁注意到Python错误消息 告诉 您如何执行此操作: 所以:

  • 我希望用户首先选择要键入的单词数,然后将单词数相加(例如Hello and bye=5 3=所有行的总长度为8),但我不知道如何将数组中的所有元素相加。 我的代码: 谢谢你的帮助

  • 问题内容: 我在以下几行中遇到问题,其中未初始化的数组/没有元素。 有什么可能的解决方案? 问题答案: 由于尚未初始化,因此没有长度,其值为。但是,编译器甚至不允许您按 原样 编译该代码,从而引发以下错误: 变量car可能尚未初始化 。 您需要先对其进行初始化,然后才能使用: 如果需要初始化一个空数组,可以使用以下命令: 如果需要使用特定的大小初始化它,以便填充某些位置,可以使用以下命令: 但是,

  • 当我们调用时,它会抛出一个异常,说明。我能做什么?

  • 问题内容: 想知道有没有比如下计算给定字符串的字符数更简单的方法? 问题答案: 具有完全的Unicode支持(Java 11+)1的最简单的方法来计算字符串中每个字符的出现次数: 1)答案的结尾是具有完整Unicode支持的Java 8版本。 输出量 更新: 对于Java 8+(不支持补充平面中的字符,例如emoji): 更新2: 同样适用于Java 8+。 我误会了,以为它是在Java 9之前才