From e16ec27c4010fcecf91fdb38bdf21459c353886b Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 25 Sep 2021 11:25:51 +0800 Subject: [PATCH] add iter --- CHANGELOG.md | 3 +- .../cn/hutool/core/collection/ArrayIter.java | 9 +- .../hutool/core/collection/ComputeIter.java | 73 +++++++++++++++ .../core/collection/ConcurrentHashSet.java | 3 +- .../cn/hutool/core/collection/CopiedIter.java | 8 +- .../core/collection/EnumerationIter.java | 8 +- .../hutool/core/collection/IterableIter.java | 17 ++++ .../cn/hutool/core/collection/LineIter.java | 91 +++---------------- .../hutool/core/collection/PartitionIter.java | 7 +- .../cn/hutool/core/text/split/Splitter.java | 12 +++ .../core/collection/PartitionIterTest.java | 2 +- .../extra/tokenizer/AbstractResult.java | 42 ++------- .../cn/hutool/extra/tokenizer/Result.java | 6 +- .../tokenizer/engine/ansj/AnsjResult.java | 17 ++-- .../tokenizer/engine/hanlp/HanLPResult.java | 22 ++--- .../engine/ikanalyzer/IKAnalyzerResult.java | 10 +- .../tokenizer/engine/jcseg/JcsegResult.java | 52 +++-------- .../tokenizer/engine/jieba/JiebaResult.java | 21 ++--- .../tokenizer/engine/mmseg/MmsegResult.java | 10 +- .../tokenizer/engine/mynlp/MynlpResult.java | 11 +-- .../tokenizer/engine/word/WordResult.java | 10 +- 21 files changed, 183 insertions(+), 251 deletions(-) create mode 100644 hutool-core/src/main/java/cn/hutool/core/collection/ComputeIter.java create mode 100644 hutool-core/src/main/java/cn/hutool/core/collection/IterableIter.java create mode 100644 hutool-core/src/main/java/cn/hutool/core/text/split/Splitter.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fdeb3e84..b3462514e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.7.14 (2021-09-24) +# 5.7.14 (2021-09-25) ### 🐣新特性 * 【extra 】 修复HttpCookie设置cookies的方法,不符合RFC6265规范问题(issue#I4B70D@Gitee) @@ -11,6 +11,7 @@ * 【setting】 增加YamlUtil * 【extra 】 SenvenZExtractor改名为SevenZExtractor,增加getFirst、get方法 * 【core 】 DateConverter修改返回java.util.Date而非DateTime(issue#I4BOAP@Gitee) +* 【core 】 增加IterableIter、ComputeIter ### 🐞Bug修复 * 【http 】 修复HttpCookie设置cookies的方法,不符合RFC6265规范问题(pr#418@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/ArrayIter.java b/hutool-core/src/main/java/cn/hutool/core/collection/ArrayIter.java index de2bf7c02..5fa25cdc7 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/ArrayIter.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/ArrayIter.java @@ -2,7 +2,6 @@ package cn.hutool.core.collection; import java.io.Serializable; import java.lang.reflect.Array; -import java.util.Iterator; import java.util.NoSuchElementException; /** @@ -12,7 +11,7 @@ import java.util.NoSuchElementException; * @author Looly * @since 4.1.1 */ -public class ArrayIter implements Iterator, Iterable, Serializable { +public class ArrayIter implements IterableIter, Serializable { private static final long serialVersionUID = 1L; /** @@ -130,10 +129,4 @@ public class ArrayIter implements Iterator, Iterable, Serializable { public void reset() { this.index = this.startIndex; } - - @Override - public Iterator iterator() { - return this; - } - } diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/ComputeIter.java b/hutool-core/src/main/java/cn/hutool/core/collection/ComputeIter.java new file mode 100644 index 000000000..86de3a064 --- /dev/null +++ b/hutool-core/src/main/java/cn/hutool/core/collection/ComputeIter.java @@ -0,0 +1,73 @@ +package cn.hutool.core.collection; + +import java.util.Iterator; +import java.util.NoSuchElementException; + +/** + * 带有计算属性的遍历器
+ * 通过继承此抽象遍历器,实现{@link #computeNext()}计算下一个节点,即可完成节点遍历
+ * 当调用{@link #hasNext()}时将此方法产生的节点缓存,直到调用{@link #next()}取出
+ * 当无下一个节点时,须返回{@code null}表示遍历结束 + * + * @param 节点类型 + * @author looly + * @since 5.7.14 + */ +public abstract class ComputeIter implements Iterator { + + private T next; + /** + * A flag indicating if the iterator has been fully read. + */ + private boolean finished; + + /** + * 计算新的节点,通过实现此方法,当调用{@link #hasNext()}时将此方法产生的节点缓存,直到调用{@link #next()}取出
+ * 当无下一个节点时,须返回{@code null}表示遍历结束 + * + * @return 节点值 + */ + protected abstract T computeNext(); + + @Override + public boolean hasNext() { + if (null != next) { + // 用户读取了节点,但是没有使用 + return true; + } else if (finished) { + // 读取结束 + return false; + } + + T result = computeNext(); + if (null == result) { + // 不再有新的节点,结束 + this.finished = true; + return false; + } else { + this.next = result; + return true; + } + + } + + @Override + public T next() { + if (false == hasNext()) { + throw new NoSuchElementException("No more lines"); + } + + T result = this.next; + // 清空cache,表示此节点读取完毕,下次计算新节点 + this.next = null; + return result; + } + + /** + * 手动结束遍历器,用于关闭操作等 + */ + public void finish(){ + this.finished = true; + this.next = null; + } +} diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/ConcurrentHashSet.java b/hutool-core/src/main/java/cn/hutool/core/collection/ConcurrentHashSet.java index 4760f8b39..7e1229e08 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/ConcurrentHashSet.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/ConcurrentHashSet.java @@ -95,6 +95,7 @@ public class ConcurrentHashSet extends AbstractSet implements java.io.Seri @Override public boolean contains(Object o) { + //noinspection SuspiciousMethodCalls return map.containsKey(o); } @@ -112,4 +113,4 @@ public class ConcurrentHashSet extends AbstractSet implements java.io.Seri public void clear() { map.clear(); } -} \ No newline at end of file +} diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CopiedIter.java b/hutool-core/src/main/java/cn/hutool/core/collection/CopiedIter.java index d6ef1ed9e..e0a68bff1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/CopiedIter.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/CopiedIter.java @@ -21,7 +21,7 @@ import java.util.List; * @author Looly * @since 3.0.7 */ -public class CopiedIter implements Iterator, Iterable, Serializable { +public class CopiedIter implements IterableIter, Serializable { private static final long serialVersionUID = 1L; private final Iterator listIterator; @@ -57,10 +57,4 @@ public class CopiedIter implements Iterator, Iterable, Serializable { public void remove() throws UnsupportedOperationException{ throw new UnsupportedOperationException("This is a read-only iterator."); } - - @Override - public Iterator iterator() { - return this; - } - } diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/EnumerationIter.java b/hutool-core/src/main/java/cn/hutool/core/collection/EnumerationIter.java index 922f2d31a..3974a1bee 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/EnumerationIter.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/EnumerationIter.java @@ -11,7 +11,7 @@ import java.util.Iterator; * @param 元素类型 * @since 4.1.1 */ -public class EnumerationIter implements Iterator, Iterable, Serializable{ +public class EnumerationIter implements IterableIter, Serializable{ private static final long serialVersionUID = 1L; private final Enumeration e; @@ -38,10 +38,4 @@ public class EnumerationIter implements Iterator, Iterable, Serializabl public void remove() { throw new UnsupportedOperationException(); } - - @Override - public Iterator iterator() { - return this; - } - } diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/IterableIter.java b/hutool-core/src/main/java/cn/hutool/core/collection/IterableIter.java new file mode 100644 index 000000000..5a58b4261 --- /dev/null +++ b/hutool-core/src/main/java/cn/hutool/core/collection/IterableIter.java @@ -0,0 +1,17 @@ +package cn.hutool.core.collection; + +import java.util.Iterator; + +/** + * 提供合成接口,共同提供{@link Iterable}和{@link Iterator}功能 + * + * @param 节点类型 + * @author looly + * @since 5.7.14 + */ +public interface IterableIter extends Iterable, Iterator { + @Override + default Iterator iterator() { + return this; + } +} diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/LineIter.java b/hutool-core/src/main/java/cn/hutool/core/collection/LineIter.java index 8b0e1cc2e..e6bf99c42 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/LineIter.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/LineIter.java @@ -11,8 +11,6 @@ import java.io.InputStream; import java.io.Reader; import java.io.Serializable; import java.nio.charset.Charset; -import java.util.Iterator; -import java.util.NoSuchElementException; /** * 将Reader包装为一个按照行读取的Iterator
@@ -36,15 +34,10 @@ import java.util.NoSuchElementException; * @author looly * @since 4.1.1 */ -public class LineIter implements Iterator, Iterable, Closeable, Serializable { +public class LineIter extends ComputeIter implements IterableIter, Closeable, Serializable { private static final long serialVersionUID = 1L; - /** The reader that is being read. */ private final BufferedReader bufferedReader; - /** The current line. */ - private String cachedLine; - /** A flag indicating if the iterator has been fully read. */ - private boolean finished = false; /** * 构造 @@ -69,82 +62,31 @@ public class LineIter implements Iterator, Iterable, Closeable, } // ----------------------------------------------------------------------- - /** - * 判断{@link Reader}是否可以存在下一行。 - * If there is an {@code IOException} then {@link #close()} will be called on this instance. - * - * @return {@code true} 表示有更多行 - * @throws IORuntimeException IO异常 - */ @Override - public boolean hasNext() throws IORuntimeException { - if (cachedLine != null) { - return true; - } else if (finished) { - return false; - } else { - try { - while (true) { - String line = bufferedReader.readLine(); - if (line == null) { - finished = true; - return false; - } else if (isValidLine(line)) { - cachedLine = line; - return true; - } + protected String computeNext() { + try { + while (true) { + String line = bufferedReader.readLine(); + if (line == null) { + return null; + } else if (isValidLine(line)) { + return line; } - } catch (IOException ioe) { - close(); - throw new IORuntimeException(ioe); + // 无效行,则跳过进入下一行 } + } catch (IOException ioe) { + close(); + throw new IORuntimeException(ioe); } } - /** - * 返回下一行内容 - * - * @return 下一行内容 - * @throws NoSuchElementException 没有新行 - */ - @Override - public String next() throws NoSuchElementException { - return nextLine(); - } - - /** - * 返回下一行 - * - * @return 下一行 - * @throws NoSuchElementException 没有更多行 - */ - public String nextLine() throws NoSuchElementException { - if (false == hasNext()) { - throw new NoSuchElementException("No more lines"); - } - String currentLine = this.cachedLine; - this.cachedLine = null; - return currentLine; - } - /** * 关闭Reader */ @Override public void close() { - finished = true; + super.finish(); IoUtil.close(bufferedReader); - cachedLine = null; - } - - /** - * 不支持移除 - * - * @throws UnsupportedOperationException 始终抛出此异常 - */ - @Override - public void remove() { - throw new UnsupportedOperationException("Remove unsupported on LineIterator"); } /** @@ -156,9 +98,4 @@ public class LineIter implements Iterator, Iterable, Closeable, protected boolean isValidLine(String line) { return true; } - - @Override - public Iterator iterator() { - return this; - } } diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/PartitionIter.java b/hutool-core/src/main/java/cn/hutool/core/collection/PartitionIter.java index 37b82c75d..ab8240c27 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/PartitionIter.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/PartitionIter.java @@ -17,7 +17,7 @@ import java.util.List; * @author qiqi.chen * @since 5.7.10 */ -public class PartitionIter implements Iterator>, Iterable>, Serializable { +public class PartitionIter implements IterableIter>, Serializable { private static final long serialVersionUID = 1L; /** @@ -40,11 +40,6 @@ public class PartitionIter implements Iterator>, Iterable>, S this.partitionSize = partitionSize; } - @Override - public Iterator> iterator() { - return this; - } - @Override public boolean hasNext() { return this.iterator.hasNext(); diff --git a/hutool-core/src/main/java/cn/hutool/core/text/split/Splitter.java b/hutool-core/src/main/java/cn/hutool/core/text/split/Splitter.java new file mode 100644 index 000000000..3510e89aa --- /dev/null +++ b/hutool-core/src/main/java/cn/hutool/core/text/split/Splitter.java @@ -0,0 +1,12 @@ +package cn.hutool.core.text.split; + +import java.io.Serializable; + +public class Splitter implements Serializable { + private static final long serialVersionUID = 1L; + + private int limit; + private boolean ignoreEmpty; + private boolean caseInsensitive; + +} diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/PartitionIterTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/PartitionIterTest.java index f88ae072f..e1b69b1f6 100644 --- a/hutool-core/src/test/java/cn/hutool/core/collection/PartitionIterTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/collection/PartitionIterTest.java @@ -12,7 +12,7 @@ public class PartitionIterTest { @Test public void iterTest() { final LineIter lineIter = new LineIter(ResourceUtil.getUtf8Reader("test_lines.csv")); - final PartitionIter iter = new PartitionIter<>(lineIter.iterator(), 3); + final PartitionIter iter = new PartitionIter<>(lineIter, 3); for (List lines : iter) { Assert.assertTrue(lines.size() > 0); } diff --git a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/AbstractResult.java b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/AbstractResult.java index ef704d339..ed4dc2963 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/AbstractResult.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/AbstractResult.java @@ -1,56 +1,26 @@ package cn.hutool.extra.tokenizer; +import cn.hutool.core.collection.ComputeIter; + import java.util.Iterator; -import java.util.NoSuchElementException; /** * 对于未实现{@link Iterator}接口的普通结果类,装饰为{@link Result}
* 普通的结果类只需实现{@link #nextWord()} 即可 - * + * * @author looly * */ -public abstract class AbstractResult implements Result{ - - private Word cachedWord; - - @Override - public boolean hasNext() { - if (this.cachedWord != null) { - return true; - } +public abstract class AbstractResult extends ComputeIter implements Result{ - final Word next = nextWord(); - if(null != next) { - this.cachedWord = next; - return true; - } - return false; - } - /** * 下一个单词,通过实现此方法获取下一个单词,null表示无下一个结果。 * @return 下一个单词或null */ protected abstract Word nextWord(); - - @Override - public Word next() { - if (false == hasNext()) { - throw new NoSuchElementException("No more word !"); - } - final Word currentWord = this.cachedWord; - this.cachedWord = null; - return currentWord; - } - - @Override - public void remove() { - throw new UnsupportedOperationException("Jcseg result not allow to remove !"); - } @Override - public Iterator iterator() { - return this; + protected Word computeNext() { + return nextWord(); } } diff --git a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/Result.java b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/Result.java index 38fbf1f2e..7fb11f873 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/Result.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/Result.java @@ -1,14 +1,14 @@ package cn.hutool.extra.tokenizer; -import java.util.Iterator; +import cn.hutool.core.collection.IterableIter; /** * 分词结果接口定义
* 实现此接口包装分词器的分词结果,通过实现Iterator相应方法获取分词中的单词 - * + * * @author looly * */ -public interface Result extends Iterator, Iterable{ +public interface Result extends IterableIter { } diff --git a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/ansj/AnsjResult.java b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/ansj/AnsjResult.java index d71ae3cb8..1762ab236 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/ansj/AnsjResult.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/ansj/AnsjResult.java @@ -1,25 +1,24 @@ package cn.hutool.extra.tokenizer.engine.ansj; -import java.util.Iterator; - -import org.ansj.domain.Term; - import cn.hutool.extra.tokenizer.Result; import cn.hutool.extra.tokenizer.Word; +import org.ansj.domain.Term; + +import java.util.Iterator; /** * Ansj分词结果实现
* 项目地址:https://github.com/NLPchina/ansj_seg - * - * @author looly * + * @author looly */ -public class AnsjResult implements Result{ - +public class AnsjResult implements Result { + private final Iterator result; - + /** * 构造 + * * @param ansjResult 分词结果 */ public AnsjResult(org.ansj.domain.Result ansjResult) { diff --git a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/hanlp/HanLPResult.java b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/hanlp/HanLPResult.java index 60af0fca6..a9b6f5452 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/hanlp/HanLPResult.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/hanlp/HanLPResult.java @@ -1,24 +1,23 @@ package cn.hutool.extra.tokenizer.engine.hanlp; +import cn.hutool.extra.tokenizer.Result; +import cn.hutool.extra.tokenizer.Word; +import com.hankcs.hanlp.seg.common.Term; + import java.util.Iterator; import java.util.List; -import com.hankcs.hanlp.seg.common.Term; - -import cn.hutool.extra.tokenizer.Result; -import cn.hutool.extra.tokenizer.Word; - /** * HanLP分词结果实现
* 项目地址:https://github.com/hankcs/HanLP - * + * * @author looly * */ public class HanLPResult implements Result { - + Iterator result; - + public HanLPResult(List termList) { this.result = termList.iterator(); } @@ -37,11 +36,4 @@ public class HanLPResult implements Result { public void remove() { result.remove(); } - - @Override - public Iterator iterator() { - return this; - } - - } diff --git a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/ikanalyzer/IKAnalyzerResult.java b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/ikanalyzer/IKAnalyzerResult.java index a00213577..5031054a8 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/ikanalyzer/IKAnalyzerResult.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/ikanalyzer/IKAnalyzerResult.java @@ -11,7 +11,7 @@ import java.io.IOException; /** * IKAnalyzer分词结果实现
* 项目地址:https://github.com/yozhao/IKAnalyzer - * + * * @author looly * */ @@ -21,7 +21,7 @@ public class IKAnalyzerResult extends AbstractResult { /** * 构造 - * + * * @param seg 分词结果 */ public IKAnalyzerResult(IKSegmenter seg) { @@ -36,9 +36,9 @@ public class IKAnalyzerResult extends AbstractResult { } catch (IOException e) { throw new TokenizerException(e); } - if (null != next) { - return new IKAnalyzerWord(next); + if (null == next) { + return null; } - return null; + return new IKAnalyzerWord(next); } } diff --git a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/jcseg/JcsegResult.java b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/jcseg/JcsegResult.java index f20635b98..d3d88d35f 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/jcseg/JcsegResult.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/jcseg/JcsegResult.java @@ -1,27 +1,24 @@ package cn.hutool.extra.tokenizer.engine.jcseg; -import cn.hutool.extra.tokenizer.Result; +import cn.hutool.extra.tokenizer.AbstractResult; import cn.hutool.extra.tokenizer.TokenizerException; import cn.hutool.extra.tokenizer.Word; import org.lionsoul.jcseg.ISegment; import org.lionsoul.jcseg.IWord; import java.io.IOException; -import java.util.Iterator; -import java.util.NoSuchElementException; /** * Jcseg分词结果包装
* 项目地址:https://gitee.com/lionsoul/jcseg - * + * * @author looly * */ -public class JcsegResult implements Result{ - +public class JcsegResult extends AbstractResult { + private final ISegment result; - private Word cachedWord; - + /** * 构造 * @param segment 分词结果 @@ -31,41 +28,16 @@ public class JcsegResult implements Result{ } @Override - public boolean hasNext() { - if (this.cachedWord != null) { - return true; - } - IWord next; + protected Word nextWord() { + IWord word; try { - next = this.result.next(); + word = this.result.next(); } catch (IOException e) { - throw new TokenizerException(e); + throw new TokenizerException(e); } - if(null != next) { - this.cachedWord = new JcsegWord(next); - return true; + if(null == word){ + return null; } - return false; + return new JcsegWord(word); } - - @Override - public Word next() { - if (false == hasNext()) { - throw new NoSuchElementException("No more word !"); - } - final Word currentWord = this.cachedWord; - this.cachedWord = null; - return currentWord; - } - - @Override - public void remove() { - throw new UnsupportedOperationException("Jcseg result not allow to remove !"); - } - - @Override - public Iterator iterator() { - return this; - } - } diff --git a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/jieba/JiebaResult.java b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/jieba/JiebaResult.java index 54bdd3bfa..276d56c65 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/jieba/JiebaResult.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/jieba/JiebaResult.java @@ -1,24 +1,23 @@ package cn.hutool.extra.tokenizer.engine.jieba; +import cn.hutool.extra.tokenizer.Result; +import cn.hutool.extra.tokenizer.Word; +import com.huaban.analysis.jieba.SegToken; + import java.util.Iterator; import java.util.List; -import com.huaban.analysis.jieba.SegToken; - -import cn.hutool.extra.tokenizer.Result; -import cn.hutool.extra.tokenizer.Word; - /** * Jieba分词结果实现
* 项目地址:https://github.com/huaban/jieba-analysis - * + * * @author looly * */ public class JiebaResult implements Result{ - + Iterator result; - + /** * 构造 * @param segTokenList 分词结果 @@ -41,10 +40,4 @@ public class JiebaResult implements Result{ public void remove() { result.remove(); } - - @Override - public Iterator iterator() { - return this; - } - } diff --git a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/mmseg/MmsegResult.java b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/mmseg/MmsegResult.java index 3b603f4b9..11beddbf5 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/mmseg/MmsegResult.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/mmseg/MmsegResult.java @@ -10,7 +10,7 @@ import java.io.IOException; /** * mmseg4j分词结果实现
* 项目地址:https://github.com/chenlb/mmseg4j-core - * + * * @author looly * */ @@ -20,7 +20,7 @@ public class MmsegResult extends AbstractResult { /** * 构造 - * + * * @param mmSeg 分词结果 */ public MmsegResult(MMSeg mmSeg) { @@ -35,9 +35,9 @@ public class MmsegResult extends AbstractResult { } catch (IOException e) { throw new TokenizerException(e); } - if (null != next) { - return new MmsegWord(next); + if (null == next) { + return null; } - return null; + return new MmsegWord(next); } } diff --git a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/mynlp/MynlpResult.java b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/mynlp/MynlpResult.java index b4facf9d0..0a27f01ec 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/mynlp/MynlpResult.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/mynlp/MynlpResult.java @@ -10,17 +10,17 @@ import java.util.Iterator; /** * MYNLP 中文NLP工具包分词结果实现
* 项目地址:https://github.com/mayabot/mynlp/ - * + * * @author looly * */ public class MynlpResult implements Result { - + private final Iterator result; /** * 构造 - * + * * @param sentence 分词结果(中文句子) */ public MynlpResult(Sentence sentence) { @@ -41,9 +41,4 @@ public class MynlpResult implements Result { public void remove() { result.remove(); } - - @Override - public Iterator iterator() { - return this; - } } diff --git a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/word/WordResult.java b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/word/WordResult.java index 67587c1f6..2587cec4f 100644 --- a/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/word/WordResult.java +++ b/hutool-extra/src/main/java/cn/hutool/extra/tokenizer/engine/word/WordResult.java @@ -9,7 +9,7 @@ import java.util.List; /** * Word分词结果实现
* 项目地址:https://github.com/ysc/word - * + * * @author looly * */ @@ -19,7 +19,7 @@ public class WordResult implements Result{ /** * 构造 - * + * * @param result 分词结果 */ public WordResult(List result) { @@ -40,10 +40,4 @@ public class WordResult implements Result{ public void remove() { this.wordIter.remove(); } - - @Override - public Iterator iterator() { - return this; - } - }