编写一个从arraylist返回迭代器的方法

时间:2013-11-10 15:22:11

标签: java arraylist iterator

我正在使用blueJ来写这个。我想要做的是从getUserIterator()开始UserGroupreturns an Iterator ArrayList的方法,并使用我的方法返回的Iterator来循环现有用户并将userType"admin"的所有用户添加到管理员组。我不知道如何执行此操作!我的代码如下:

用户类:

package user; 
public class User{
    public enum UserType{                          
        ADMIN, EDITOR, USER;
    }

    private String id;                            
    private UserType userPermissions;              
    private String actualName;                     

    public User(String username, UserType userType, String name){
        id = username;
        userPermissions = userType;
        actualName= name;
    }

    public String getUsername(){
        return id;
    }

    public UserType getUserType(){
        return userPermissions;
    }       

    public String getName(){
        return actualName;
    }

    public void setUserType(UserType input){
        userPermissions = input;
    }
}

,userGroup类为:

package user;
import java.util.*;
import user.User.UserType; 

public class UserGroup{

    private ArrayList<User> people;

    public UserGroup(){
        people = new ArrayList<User>();
    }

    public void addSampleData(){
        people.add(new User("jar1g13", UserType.ADMIN,"Jonny"));
        people.add(new User("ao9", UserType.EDITOR,"Aniruddh"));
        people.add(new User("pe6", UserType.USER,"Peter"));
        people.add(new User("mat73", UserType.USER,"Matthew"));
        people.add(new User("ora69", UserType.EDITOR,"Oranthi"));
        people.add(new User("ben12", UserType.USER,"Benedict"));
        people.add(new User("cam30", UserType.ADMIN,"Cambyse"));
        people.add(new User("are20", UserType.USER,"Alex"));
        people.add(new User("lim19", UserType.USER,"Liam"));
        people.add(new User("ada13", UserType.EDITOR,"Adam"));
    } 

    public User getUser(int idx){
        return people.get(idx);
    }

    public void printUsernames(){
        for (User user: people){
            System.out.printf("%s %s\n", user.getUsername(), user.getUserType());
        }
    }

    public void removeFirstUser(){
        people.remove(0);
    }

    public void removeLastUser(){
        people.remove(people.size()-1);
    }

    public void removeUser(String username){
        Iterator<User> itr = people.iterator();
        while (itr.hasNext()){
            User element = (User) itr.next();
            if (element.getUsername().equals(username)){
                itr.remove();                                       
            }
        }
    }

}

主要课程:

package user;

public class Main{

    public static void main(String[] args){
        UserGroup grp = new UserGroup();          
        grp.addSampleData();                       
        grp.printUsernames();                      
    }

    public static void admins(){
        UserGroup administrators - new UserGroup(); 
    }
}

2 个答案:

答案 0 :(得分:1)

我会把它写成

public class UserGroup implements Iterable<User> {
    private final List<User> people = new ArrayList<User>();

    public Iterator<User> iterator() {
        return people.iterator();
    }
    // OR to prevent the list being modified.
    public Iterator<User> iterator() {
        return Collections.unmodifableList(people).iterator();
    }
    // OR for extra paranoia
    public Iterator<User> iterator() {
        return Collections.unmodifableList(new ArrayList<Person>(people)).iterator();
    }
    // OR for even more paranoia
    public Iterator<User> iterator() {
        List<People> ret = new ArrayList<People>();
        for(People p : people)
            ret.add(new Person(p)); // take a deep copy.
        return Collections.unmodifableList(ret).iterator();
    }
}

// later
UserGroup userGroup = ...
for(User u : userGroup) {
   // do something with u
}

这假设您不必担心调用者修改列表(这是不应该做的,但有些人担心这些事情)

答案 1 :(得分:1)

你需要一个

public Iterator<User> getIterator(){
  return people.iterator;
}

在类UserGroup中,您可以在任何其他类(或方法)中访问它,该类处理迭代列表中的用户并执行诸如检查其类型是否与给定类型相对应的事情(如您想要管理员)。