Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将条件作为参数传递给迭代器_Java_Eclipse_Parameter Passing - Fatal编程技术网

Java 将条件作为参数传递给迭代器

Java 将条件作为参数传递给迭代器,java,eclipse,parameter-passing,Java,Eclipse,Parameter Passing,我的项目快完成了,尽管有一件事我无法通过 让我先引述: 类板还必须提供一个返回迭代器的方法,该迭代器将 返回棋盘上的所有元素(不包括机器人携带的项目) 满足给定的条件。条件的示例是具有 能量至少为1000瓦(迭代器将不会返回墙壁,也不会令人惊讶) 盒子,因为它们没有已知的能量),所有元素都在 董事会、董事会上的所有项目等 所以,我有一个板上的元素。(机器人、某些物品、墙壁等) 在类中,我们已经看到了如何实现Iterable,并在需要时重写方法iterator(),但现在我需要将条件作为参数传递给

我的项目快完成了,尽管有一件事我无法通过

让我先引述:

类板还必须提供一个返回迭代器的方法,该迭代器将 返回棋盘上的所有元素(不包括机器人携带的项目) 满足给定的条件。条件的示例是具有 能量至少为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请看我的编辑。你甚至可以调用
    过滤器
    界面
    条件
    。你可以替换匹配项