在java中将元素添加到iterable中

时间:2014-12-09 15:31:10

标签: java add iterable

我有以下代码:

public class Router {
  private Iterable<Route> routes;

  public Router(Iterable<Route> routes) {
    this.routes = routes;
  }
  public void addRoute(Route route) {
    routes.add(route);\\problem is here
  }
}

我突出显示了不起作用的行。在这里,我尝试向路线添加新对象。在主文件路由中:

public class RouterMain 
{
    public static void main(String[] arg) throws IllegalArgumentException 
    {
        List<Route> routes = new ArrayList<Route>();
        Router router = new Router(routes);
    }
}

任务是在Router类的可迭代对象中添加一个对象。据我所知Iterable可以迭代,而不是添加一些东西。那么我应该怎么做,将Router类中的路由转换为List,添加一个元素然后返回?

5 个答案:

答案 0 :(得分:5)

Iterable<Router>用于启用对类中包含的Router元素的迭代。虽然许多集合实现了这个接口,但它不是Collection。它没有add方法。它只有一个返回Iterator<Router>

的方法

您应该使用一些Collection(List,Set等)来存储您的路线。这些集合有add方法。

public class Router {
  private List<Route> routes = new ArrayList<Route>();

  public Router(Iterable<Route> routes) {
    for (Route route : routes)
      this.routes.add(route);
  }

}

答案 1 :(得分:0)

Iterable没有添加方法。也许你需要一个AbstractCollection

http://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html

答案 2 :(得分:0)

Iterable是一种主要用于循环和实用函数的类型 - 一般情况下应该避免使用它。我建议将构造函数更改为Router(Collection<Route> routes)并在内部使用Collection接口。这样,您几乎可以使用任何集合类型(集合和列表)。

为了更加安全,请复制一下该集合 - 然后,如果有人在您的代码之外更改了该集合,您就不会受到伤害。

答案 3 :(得分:0)

使用List界面代替Iterable。它有一个方法listIterator。其中返回ListIterator的实例。在此界面中,您可以添加和删除项目。 Iterable看起来不适合你的任务。

答案 4 :(得分:0)

如果要添加它,您可以创建一个新列表并将所有当前元素添加到该列表中,然后只需添加您想要的对象,例如

public class Router {
  private Iterable<Route> routes;

  public Router(Iterable<Route> routes) {
    this.routes = routes;
  }
  public void addRoute(Route route) {

    //create new list
    ArrayList<Route> myList = new ArrayList<Route>();

    //iterate through current objects and add them to new list
    Iterator<Route> routeIterator = routes.iterator();
    while(routeIterator.hasNext()){
        myList.add(routeIterator.next());
    }


    //add object you would like to the list
    myList.add(route);

  }
}