From 03c89341225a7318e30e70ecfa3379c602b987a0 Mon Sep 17 00:00:00 2001 From: wolray <290061869@qq.com> Date: Wed, 15 Mar 2023 16:49:28 +0800 Subject: [PATCH] [add] direct Stream support as output --- .../com/alibaba/excel/EasyExcelFactory.java | 19 ++++++++++ .../java/com/alibaba/excel/StreamBuilder.java | 36 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 easyexcel-core/src/main/java/com/alibaba/excel/StreamBuilder.java diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/EasyExcelFactory.java b/easyexcel-core/src/main/java/com/alibaba/excel/EasyExcelFactory.java index 80c40851..6d85d296 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/EasyExcelFactory.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/EasyExcelFactory.java @@ -3,7 +3,10 @@ package com.alibaba.excel; import java.io.File; import java.io.InputStream; import java.io.OutputStream; +import java.util.function.Consumer; +import java.util.stream.Stream; +import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.read.builder.ExcelReaderBuilder; import com.alibaba.excel.read.builder.ExcelReaderSheetBuilder; import com.alibaba.excel.read.listener.ReadListener; @@ -246,6 +249,22 @@ public class EasyExcelFactory { return read(pathName, null, readListener); } + public static Stream read(String pathName, Class head) { + Consumer> sequence = c -> { + ReadListener listener = new ReadListener<>() { + @Override + public void invoke(T data, AnalysisContext context) { + c.accept(data); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext context) {} + }; + read(pathName, head, listener).sheet().doRead(); + }; + return StreamBuilder.stream(sequence); + } + /** * Build excel the read * diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/StreamBuilder.java b/easyexcel-core/src/main/java/com/alibaba/excel/StreamBuilder.java new file mode 100644 index 00000000..486edec4 --- /dev/null +++ b/easyexcel-core/src/main/java/com/alibaba/excel/StreamBuilder.java @@ -0,0 +1,36 @@ +package com.alibaba.excel; + +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.Spliterator; +import java.util.Spliterators; +import java.util.function.Consumer; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +/** + * build stream from generator + */ +public class StreamBuilder { + public static Stream stream(Consumer> sequence) { + Iterator iterator = new Iterator<>() { + @Override + public boolean hasNext() { + throw new NoSuchElementException(); + } + + @Override + public T next() { + throw new NoSuchElementException(); + } + + @Override + public void forEachRemaining(Consumer action) { + sequence.accept(action::accept); + } + }; + return StreamSupport.stream( + Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), + false); + } +}