package example.iterExample;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
* 詳細è«è¿½åå§ç¢¼ï¼åæ¥éè£¡è¬æ¦å¿µã
* 1) iterable, iterator ççº interface class.
* 2) 妿ä¸åclass實ç¾iterable interfaceï¼é£å°±éè¦å»ºç«ä¸åå
§é¨é¡å»å¯¦ç¾ä¸åiterator classã
* 3) 妿è½ä½¿ç¨è·ä»£å¨iterator便·éå°±å¯ä»¥ä½¿ç¨foreach
* 4) Mapç¡æ³ç´æ¥ä½¿ç¨foreachï¼ä½List, Setå¯ä»¥ã
*
*
* Iterable:
*! - 代表è½è¢«è¿ä»£çéåï¼æä»¥è½è¢«For-Each loopåæforEach()æ¹æ³ï¼
*
* Iterator: (è¿ä»£å¨)
*! - 代表éåçè¿ä»£å¨ï¼æä»¥æhasNext()ånext()ç¨ä¾è¿ä»£çæ¹æ³ã
*
* TODO: å¢å forEachRemaining ç¯ä¾, iterator().forEachRemaining
*
* Reference
* - https://kucw.github.io/blog/2018/12/java-iterator/
* - https://www.baeldung.com/java-iterable-to-collection
* - https://www.gushiciku.cn/pl/g25m/zh-tw
* - https://openhome.cc/Gossip/Java/IterableIterator.html
*/
// åªè¦ç¹¼æ¿ Iterable ä»é¢é½å¿
é è¦å¯¦ä½ iterator() æ¹æ³ã
/*
interface Iterable {
Iterator iterator();
default void forEach(Consumer super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
}
*/
// ! å¯ä½¿ç¨è·ä»£å¨ iterator 廿·é ArrayList
// interface Iterator {
// boolean hasNext();
// E next();
// void remove(); // delet the last element.
// }
public class BaseIter {
public static void main(String[] args) {
useIterable();
useIterator();
// TODO: èä¾æç¡ææiterableï¼ä½æ²æiteratorçç¯ä¾!?
}
// ! è«æ³¨æ useIterable å useIterator å·®ç°!!
public static void useIterable() {
// ä½¿ç¨ iterable ä¾è¿ä»£
Iterable iter = Arrays.asList("john", "tom", "jane");
System.out.println("ä½¿ç¨ iterable ä¾è¿ä»£æ·é:");
iter.forEach(s -> {
System.out.println(s);
});
}
public static void useIterator() {
// ä½¿ç¨ iterator ä¾è¿ä»£
Iterable iter = Arrays.asList("john", "tom", "jane");
Iterator iterator = iter.iterator();
System.out.println("ä½¿ç¨ iterator ä¾è¿ä»£æ·é:");
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
public static void iterableGenericExample() {
// TODO: å¯ä»¥è©¦è©¦çä½¿ç¨ generic method.
}
public void testIterableConvertToList() {
List list = new ArrayList<>();
Iterable iterable = Arrays.asList("john", "tom", "jane");
iterable.forEach(list::add);
}
}