Java 将条件作为参数传递给迭代器
我的项目快完成了,尽管有一件事我无法通过 让我先引述: 类板还必须提供一个返回迭代器的方法,该迭代器将 返回棋盘上的所有元素(不包括机器人携带的项目) 满足给定的条件。条件的示例是具有 能量至少为1000瓦(迭代器将不会返回墙壁,也不会令人惊讶) 盒子,因为它们没有已知的能量),所有元素都在 董事会、董事会上的所有项目等 所以,我有一个板上的元素。(机器人、某些物品、墙壁等) 在类中,我们已经看到了如何实现Iterable,并在需要时重写方法iterator(),但现在我需要将条件作为参数传递给该迭代器 我最好的办法是在课堂上使用这种方法:Java 将条件作为参数传递给迭代器,java,eclipse,parameter-passing,Java,Eclipse,Parameter Passing,我的项目快完成了,尽管有一件事我无法通过 让我先引述: 类板还必须提供一个返回迭代器的方法,该迭代器将 返回棋盘上的所有元素(不包括机器人携带的项目) 满足给定的条件。条件的示例是具有 能量至少为1000瓦(迭代器将不会返回墙壁,也不会令人惊讶) 盒子,因为它们没有已知的能量),所有元素都在 董事会、董事会上的所有项目等 所以,我有一个板上的元素。(机器人、某些物品、墙壁等) 在类中,我们已经看到了如何实现Iterable,并在需要时重写方法iterator(),但现在我需要将条件作为参数传递给
public Iterator<Element> getAllElementsByCondition(boolean condition) {
HashSet<Element> result = new HashSet<Element>();
for (Element element : elements)
if (Board.this.hasElement(element) && condition)
result.add(element);
return result.iterator();
}
公共迭代器GetAllegementsByCondition(布尔条件){
HashSet result=新的HashSet();
for(元素:元素)
if(板.本.部件(部件)和条件)
结果:添加(元素);
返回result.iterator();
}
但是,正如您所看到的,我不知道如何将条件作为参数传递给方法
我也不知道这是否是我创建迭代器的方式
编辑:我不允许使用任何外部库请考虑使用Guava的收藏扩充。在这种情况下,特别是或。如果这样做,您可以提供一个
谓词
来描述您关心的条件,只需使用filter()
来运行集合并返回匹配元素的集合。下面是一个非常本地化的示例:
public Iterator<Element> getAllElementsByCondition(Predicate<Element> condition) {
return Collections2.filter(elements, condition).iterator();
}
公共迭代器getAllegementsByCondition(谓词条件){
返回Collections2.filter(元素、条件).iterator();
}
但这并不是说,如果你接受了做事的方式,你可能会更彻底地改变结构。考虑使用番石榴的收藏扩充。在这种情况下,特别是或。如果这样做,您可以提供一个
谓词
来描述您关心的条件,只需使用filter()
来运行集合并返回匹配元素的集合。下面是一个非常本地化的示例:
public Iterator<Element> getAllElementsByCondition(Predicate<Element> condition) {
return Collections2.filter(elements, condition).iterator();
}
公共迭代器getAllegementsByCondition(谓词条件){
返回Collections2.filter(元素、条件).iterator();
}
但这并不是说,如果你接受做事的方式,你可能会更彻底地改变结构。我认为你应该澄清这项任务。我认为您的方法应该是可行的,尽管它应该缩小到像
getAllegementswithenergyCreaterthan(intminenergy)
这样的范围。在你的循环中,你将你的能量与我的能量进行比较。我认为你应该澄清这项任务。我认为您的方法应该是可行的,尽管它应该缩小到像getAllegementswithenergyCreaterthan(intminenergy)
这样的范围。在你的循环中,你将你的能量与minEnergy进行比较。假设你不允许使用像Guava这样的外部库,你可以:
Filter
接口,它有一个方法,我们称之为布尔匹配(tobj)
过滤器
传递给迭代器,迭代器实现匹配
方法来测试条件,例如返回“我正在寻找的名称”。等于(element.getName())代码>
filter.match(element)
然后result.add(element)
,则在循环中进行测试您的新方法将是:
public Iterator<Element> getAllElementsByCondition(Filter<Element> filter) {
假设不允许您使用像Guava这样的外部库,您可以:
Filter
接口,它有一个方法,我们称之为布尔匹配(tobj)
过滤器
传递给迭代器,迭代器实现匹配
方法来测试条件,例如返回“我正在寻找的名称”。等于(element.getName())代码>
filter.match(element)
然后result.add(element)
,则在循环中进行测试您的新方法将是:
public Iterator<Element> getAllElementsByCondition(Filter<Element> filter) {
您只需要使用迭代器从board中查看元素列表并手动(通过代码)检查条件。重点是我不知道用户将要求什么条件。请查看guava
迭代器
或Iterables
()过滤方法我不允许使用任何外部库:(您只需要使用迭代器从board中查看元素列表并手动(通过代码)检查条件。重点是,我不知道用户将要求什么条件。请查看guava迭代器
或Iterables
()过滤方法我不允许使用任何外部库:(我认为我的指派人也应该澄清任务,但遗憾的是,他们没有:/我认为我的指派人也应该澄清任务,但遗憾的是,他们没有:/我不允许使用任何外部库:(嗯。这个约束来自何处?无论如何,@assylias可能有第二个最好的东西。重新实现类似Guava提供的东西。从你的问题看不出你需要多少灵活性。你是在问如何实现一个迭代器
?我不允许使用任何外部库:(嗯。这个约束来自哪里?无论如何,@assylias可能有次好的东西。重新实现一些像Guava提供的东西。从你的问题看不出你需要多大的灵活性。你是在问如何实现一个迭代器
?我想这是我在寻找的,但我不完全理解它。。。关于界面部分,我同意你的看法。但是,第2步,你能澄清一下吗?@AdFundum请看我的编辑。你甚至可以调用过滤器
界面条件
。你可以替换匹配项