如標題所示,這item希望在設計回傳type時,能傾向用Collection而不是Stream。第一個探討的是iterator的使用。假如要使用for each,你需要寫醜醜的code去做轉型,才能通過compiler:
for (ProcessHandle ph : (Iterable<ProcessHandle>)ProcessHandle.allProcesses()::iterator) ..假如要避免這種寫法,可以寫一個adapter去做這件事情;但同時你可能也會需要Stream to Interable:
public static <E> Iterable<E> iterableOf(Stream<E> stream) { return stream::iterator; } for (ProcessHandle p : iterableOf(ProcessHandle.allProcesses())) { // Process the process } public static <E> Stream<E> streamOf(Iterable<E> iterable) { return StreamSupport.stream(iterable.spliterator(), false); }
Effective Java第三版Item 47。