如何在java中获取特定的列表索引?

时间:2014-10-09 09:37:22

标签: java

请考虑以下代码:

public class UserJMXBeanImpl implements UserJMXBean {

private  List<User> userList = new ArrayList<>();

public  void addUser(User user){
    userList.add(user);

}


public  List<User> getUserList() {

    return userList;
}

public void setUserList(List<User> userList) {
    this.userList = userList;
}
}

此代码的get方法提供此值:debugger

我只需要使用角色和userID值,并将其用于我的操作。当我将get方法的返回类型更改为return userList.get(0).getUserId()时,我的返回类型会发生变化。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

你正在制造混乱。 get方法应保持原样,可以调用它来返回作为实例变量的列表,并且只能通过getter方法访问。也许你想要的是另一种方法,如:

public List<String> extractUserFields(User user){
    List<String> fields = new List<String>();
    fields.add(user.getId());
    fields.add(user.getRole());
    return fields;
}

或者可以将userList作为方法的参数并从中提取所需的用户。

编辑:另一个建议。你试图这样做的方式是另一个原因是错误的。永远记住要保持方法的名称与它应该做的事情一致。您希望getList方法返回第一个元素的ID和roles字段。这是错误的,因为方法名称,当您与其他人一起编码或者您将在几个月内检查自己的代码时,将导致理解错误。

想象一下像这样的方法,并想一想这种做法有多害:

public String getBombLocation(Bomb bomb){
    bomb.explode();
    return "BOOM!";
    }

答案 1 :(得分:0)

至少有4个选项:

a)从代码中访问UserJMXBean:

String searchName="Hubert";
String searchRole="Admin";

UserJMXBean bean = new UserJMXBeanImpl();

for(User user : bean.getUserList()){
    if(user.getName().equals(searchName) && user.getRole().equals(searchRole)){
        //do something with your user
        String userID = user.getID();
    }
}

b)向UserJMXBeanImpl和UserJMXImplBean添加一个新方法并返回用户实例:

public User findUser(String name, String role){
    for(User user : this.getUserList()){
        if(user.getName().equals(name) && user.getRole().equals(role)){
            return user;
        }
    }
    return null;
}

c)向UserJMXBeanImpl和UserJMXImplBean添加一个新方法并返回所需的属性:

public String[] getUserAttributes(String name, String role){
    for(User user : this.getUserList()){
        if(user.getName().equals(name) && user.getRole().equals(role)){
            return new String[]{user.getID(), 
                                user.getRole(),
                                user.getEmail()}
        }
    }
    return null;
}

d)您可以重载现有方法并返回size-1-list:

public  List<User> getUserList(String name, String role) {
    for(User user : this.getUserList()){
        if(user.getName().equals(name) && user.getRole().equals(role)){
            List<User> list = new ArrayList<>(1);
            list.add(user);
            return list;
        }
    }
    return Collections.emptyList();
}