java - 如何制作 Stream 的副本,以便在使用它时使用 Java 8 中的副本?

标签 java java-8 java-stream

<分区>

这是我的代码的样子:

public static String firstContainsChars(Stream<String> items,String charset) {
    char[] inChars = charset.toCharArray();
    for (char ch:inChars) {
        items.filter(s->s.contains(String.valueOf(ch)));
    }
    return items.findFirst().orElse("No Match Found");
}

事实上,我得到了一个字符集合作为 Stringfilter 流,但问题是我不能在 foreach 循环和编译器说:

Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed

关于如何复制 Stream 而无需将其收集为 Collection 的任何想法,因为这将是完全浪费。 (chnage 之后的流和收集)?

最佳答案

正如我在评论部分所说,您必须将 items 分配给循环中的新管道。

public static String firstContainsChars(Stream<String> items, String charset) {
  char[] inChars = charset.toCharArray();
  for (char ch : inChars) {
    items = items.filter(s -> s.contains(String.valueOf(ch)));
  }
  return items.findFirst().orElse("No Match Found");
}

但更简洁的方法是也流式传输您的字符集,例如:

public static String firstContainsChars(Stream<String> items, String charset) {
  return items.filter(s -> charset.codePoints().allMatch(cp -> s.indexOf(cp) != -1))
              .findFirst().orElse("No Match Found");
}

关于java - 如何制作 Stream 的副本,以便在使用它时使用 Java 8 中的副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38612288/

相关文章:

java - 当再次处理相同的数据和任务时,Java 8 流是否会重用自身?

java - 在 Spring Boot 中访问外部配置的好习惯是什么?

java - 调整框架大小时,JLabel 的位置更改为奇怪的位置

java - java hashcode()面试题

java - 如何引用 Lambda?

java - 有没有更好的方法可以使用 Stream 进行编写?

java - 正确的 lambda 过滤器实现

java - 创建新对象时使用 char

java - 如何在上述情况下使用 Java 8 Optional?

Java 8 Lambda - 过滤两个 ArrayList