Browse Source

[add] direct Stream support as output

pull/3052/head
wolray 2 years ago committed by GitHub
parent
commit
03c8934122
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 19
      easyexcel-core/src/main/java/com/alibaba/excel/EasyExcelFactory.java
  2. 36
      easyexcel-core/src/main/java/com/alibaba/excel/StreamBuilder.java

19
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 <T> Stream<T> read(String pathName, Class<T> head) {
Consumer<Consumer<T>> sequence = c -> {
ReadListener<T> 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
*

36
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 <T> Stream<T> stream(Consumer<Consumer<T>> sequence) {
Iterator<T> iterator = new Iterator<>() {
@Override
public boolean hasNext() {
throw new NoSuchElementException();
}
@Override
public T next() {
throw new NoSuchElementException();
}
@Override
public void forEachRemaining(Consumer<? super T> action) {
sequence.accept(action::accept);
}
};
return StreamSupport.stream(
Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED),
false);
}
}
Loading…
Cancel
Save