【问题标题】:Split Integers Using Stream Lambda使用 Stream Lambda 拆分整数
【发布时间】:2020-05-04 12:05:48
【问题描述】:

我正在研究 Java8 中 Stream 和 Lambda 的用法。您将如何将 Stream 和 Lambda 应用于以下内容:使用 Stream 和 Lambda 打印以下字符串中的奇数:“[3, 6, 8, 96, 7, 23]”。

我发现使用 for 循环和 parseInt 非常简单,但是如何实现流和 lambda。

【问题讨论】:

  • 先告诉我们你做了什么?
  • 我现在没有代码,但是可以根据逗号拆分所有内容,然后将每个元素推入一个数组,然后可能从第一个和最后一个元素中删除括号如果它的 mod 2 值为 1,则取余数并打印它

标签: java string lambda java-stream


【解决方案1】:

您可以像这样使用带有拆分的子字符串:

String str = "[3, 6, 8, 96, 7, 23]";
Arrays.stream(str.substring(1, str.length() - 1).split(", "))
        .filter(s -> Integer.valueOf(s) % 2 != 0)
        .forEach(System.out::println);

或者如果你想得到一个数组,那么你可以像这样使用toArray

.toArray(String[]::new);

或者如果你想得到一个整数数组,你可以使用一个映射然后一个过滤器,像这样:

Integer[] array = Arrays.stream(str.substring(1, str.length() - 1).split(", "))
        .map(Integer::valueOf)
        .filter(i -> i % 2 != 0)
        .toArray(Integer[]::new);

输出

3
7
23

【讨论】:

  • 非常感谢...只是为了澄清一下 - 流和 lambda 与 Java 7 中更简单的方法相比有什么好处
  • 关于这个问题我无法给你一个完整的答案,因为我邀请你详细了解dzone.com/articles/why-java-8-1,以及互联网上的许多其他书籍和论坛
【解决方案2】:

通过“[”、“]”、“”和“,”将字符串转换为字符串[] 然后过滤空白值而不是奇数

Arrays.stream("[3, 6, 8, 96, 7, 23]".split("[,\\s\\[\\]]"))
.filter(s->!s.isBlank() && Integer.valueOf(s)%2!=0)
.forEach(s-> System.out.println(s));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 2023-03-11
    • 2017-08-03
    • 2014-08-13
    • 2015-07-22
    • 2011-11-22
    相关资源
    最近更新 更多