使用参数 Java 调用迭代器函数
Call iterator function with argument Java
我有 类 如下所示:
public class F implements Iterable<P>
{
private final List<P> pra = new ArrayList<P>();
public Iterator<P> iterator()
{
return pra.iterator();
}
public Iterator<P> iterator(S s)
{
return pra.stream().filter(x -> x.s == s).iterator();
}
}
public class P
{
//some code
}
public enum S
{
//some code
}
而且我不知道如何通过foreach循环调用main中的迭代器函数。
我的意思是,当迭代器函数没有参数时,它很简单:
F f = new F();
for(P x: f)
{
System.out.printf("%s\n", p.toString());
}
但是当迭代器函数获得一个参数时,我该如何做呢?
增强 for-loop 需要的不是 Iterator
,而是 Iterable
。
如果您想使用参数调用 F
中的方法,并获得可以在增强 for-loop 中使用的内容,那么您需要您的方法 return Iterable
.
public class F {
private final List<P> pra = new ArrayList<P>();
public Iterable<P> filter(S s) {
return () -> (pra.stream().filter(x -> x.s==s).iterator());
}
}
这样,您就可以使用 for (P p : f.filter(s)) ...
我有 类 如下所示:
public class F implements Iterable<P>
{
private final List<P> pra = new ArrayList<P>();
public Iterator<P> iterator()
{
return pra.iterator();
}
public Iterator<P> iterator(S s)
{
return pra.stream().filter(x -> x.s == s).iterator();
}
}
public class P
{
//some code
}
public enum S
{
//some code
}
而且我不知道如何通过foreach循环调用main中的迭代器函数。
我的意思是,当迭代器函数没有参数时,它很简单:
F f = new F();
for(P x: f)
{
System.out.printf("%s\n", p.toString());
}
但是当迭代器函数获得一个参数时,我该如何做呢?
增强 for-loop 需要的不是 Iterator
,而是 Iterable
。
如果您想使用参数调用 F
中的方法,并获得可以在增强 for-loop 中使用的内容,那么您需要您的方法 return Iterable
.
public class F {
private final List<P> pra = new ArrayList<P>();
public Iterable<P> filter(S s) {
return () -> (pra.stream().filter(x -> x.s==s).iterator());
}
}
这样,您就可以使用 for (P p : f.filter(s)) ...