【问题标题】:How to convert a String to a Java 8 Stream of Characters?如何将字符串转换为 Java 8 字符流?
【发布时间】:2014-10-12 01:19:48
【问题描述】:

我发现 this question 关于从 java String 获取 java.util.streams.IntStream 但现在我使用的是 Java 8,所以我还没有找到这个方法。

更正:正如你们所指出的,我使用的是 Java 7。现在方法 chars() 就在那里。但问题仍然适用:

如何从字符串中获取Stream<Character>

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:

    我打算在这个主题上将您指向my earlier answer,但事实证明您已经链接到that questionother answer 也提供有用的信息。

    如果您想要char 值,您可以使用String.chars() 返回的IntStream 并将int 值转换为char 而不会丢失信息。其他答案解释了为什么 CharStream 类没有 Stream 原始特化。

    如果你真的想要装箱的Character 对象,那么使用mapToObj()IntStream 转换为引用类型的流。在mapToObj() 中,将int 值强制转换为char。由于这里需要一个对象作为返回值,char 将被自动装箱为Character。这导致Stream<Character>。例如,

    Stream<Character> sch = "abc".chars().mapToObj(i -> (char)i);
    sch.forEach(ch -> System.out.printf("%c %s%n", ch, ch.getClass().getName()));
    
    a java.lang.Character
    b java.lang.Character
    c java.lang.Character
    

    【讨论】:

      【解决方案2】:

      请确保您使用的是JDK 8。该方法位于CharSequence接口中,由String实现。

      这个 sn-p 工作正常:

      import java.util.stream.IntStream;
      
      public class CharsSample {
      
          public static void main(String[] args) {
              String s =  "123";
              IntStream chars = s.chars();
          }
      }
      

      【讨论】:

      • 是的,我得到了使用 Java 7 的 gradle。但是如何从字符串中获取 Stream
      • @ElderMael 您使用的是 Java 7 还是 Java 8?这些方法和类型对于 Java 8 来说是新的。
      【解决方案3】:

      我使用 Pattern 方法的另一种方法迟到了:splitAsStream()

      String test = "Lobgasex loga nepe co so x";

      List<Character> chars = Pattern.compile("").splitAsStream(test)
          .map(i -> i.charAt(0))
          .collect(Collectors.toList());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多