[在此问题中,我需要编写一个findMatch方法,该方法采用一个“流”(IFL旨在模拟一个流),并找到通过谓词的流的第一个元素。我的尝试如下:
import java.util.function.Predicate; import java.util.Optional; import java.util.ArrayList; import java.util.List; class IFL<T> { Supplier<T> head; Supplier<IFL<T>> tail; IFL(Supplier<T> head, Supplier<IFL<T>> tail) { this.head = head; this.tail = tail; } static <T> IFL<T> of(List<? extends T> list) { return new IFL<T>( () -> list.get(0), () -> IFL.of(list.subList(1, list.size()))) { }; } Optional<T> findMatch(Predicate<? super T> predicate) { if (predicate.test(head.get())) { return Optional.of(this.head.get()); } else { if (this.tail.get().findMatch(predicate).isPresent()) { return this.tail.get().findMatch(predicate); } return Optional.empty(); } } }
[我面临的问题是,我的findMatch方法中的
else
块似乎只运行return
语句,而不是像我认为的那样递归调用自身。无论如何,是否有保证?
更新:我已经获得了用于第二行输入的代码。但是,运行输入的第三行会在jshell中产生IndexOutOfBoundsException
。
输入如下
IFL<String> list = IFL.of(Arrays.asList("three", "little", "pigs"))
list.findMatch(str -> str.length() == 6)
list.findMatch(str -> str.length() < 4)
[在此问题中,我需要编写一个findMatch方法,该方法采用一个“流”(IFL旨在模拟一个流),并找到通过谓词的流的第一个元素。我的尝试是...
为IndexOutOfBoundsException
方法List#subList
的非法端点索引值抛出[(fromIndex < 0 || toIndex > size || fromIndex > toIndex)