如何将字符串流转换为字符串对?

如何将字符串流转换为字符串对?,第1张

如何将字符串流转换为字符串对?

如果你:

  1. 不喜欢使用流中所有字符串创建列表的想法
  2. 不想使用外部库
  3. 喜欢弄脏你的手

然后可以从使用Java
8低电平流助洗剂流创建到组元素的方法

StreamSupport
Spliterator

class StreamUtils {    public static<T> Stream<List<T>> sliding(int size, Stream<T> stream) {        return sliding(size, 1, stream);    }    public static<T> Stream<List<T>> sliding(int size, int step, Stream<T> stream) {        Spliterator<T> spliterator = stream.spliterator();        long estimateSize;        if (!spliterator.hasCharacteristics(Spliterator.SIZED)) { estimateSize = Long.MAX_VALUE;        } else if (size > spliterator.estimateSize()) { estimateSize = 0;        } else { estimateSize = (spliterator.estimateSize() - size) / step + 1;        }        return StreamSupport.stream(     new Spliterators.AbstractSpliterator<List<T>>(estimateSize, spliterator.characteristics()) {         List<T> buffer = new ArrayList<>(size);         @Override         public boolean tryAdvance(Consumer<? super List<T>> consumer) {  while (buffer.size() < size && spliterator.tryAdvance(buffer::add)) {      // Nothing to do  }  if (buffer.size() == size) {      List<T> keep = new ArrayList<>(buffer.subList(step, size));      consumer.accept(buffer);      buffer = keep;      return true;  }  return false;         }     }, stream.isParallel());    }}

方法和参数的命名受到了Scala同行的启发。

让我们测试一下:

Stream<String> testing = Stream.of("A", "Apple", "B", "Banana", "C", "Carrot");System.out.println(StreamUtils.sliding(2, testing).collect(Collectors.toList()));

[[A,Apple],[Apple,B],[B,Banana],[Banana,C],[C,Carrot]]

关于不重复元素呢:

Stream<String> testing = Stream.of("A", "Apple", "B", "Banana", "C", "Carrot");System.out.println(StreamUtils.sliding(2, 2, testing).collect(Collectors.toList()));

[[A,Apple],[B,Banana],[C,Carrot]]

现在具有无限

Stream

StreamUtils.sliding(5, Stream.iterate(0, n -> n + 1))        .limit(5)        .forEach(System.out::println);

[0、1、2、3、4]
[1、2、3、4、5]
[2、3、4、5、6]
[3、4、5、6、7]
[4、5、6 ,7,8]



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5498638.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存