[英]Using ListIterator to get the Next and Previous elements from the Current element of the List
[英]Which is the best way to get a previous, current and next item from a Java List
我有一个 object 用户
User
id: Integer
nickname : String
score: Integer
以及按分数排序的用户列表:
id name score
3 John 90
2 Mike 80
4 Davi 30
5 Ana 20
6 Jane 10
我需要一个 function 返回带有参数传递的 Id 的用户,前一个值和下一个
例如:婴儿车 id = 4:
2 Mike 80
4 Davi 30
5 Ana 20
但是当id有最高分返回
例如:婴儿车 id = 2:
3 John 90
2 Mike 80
4 Davi 30
我总是需要返回一个包含 3 个值的列表
制作这个 function 的最佳方法是什么?
您不需要为此做任何特别的事情,只需要一个简单的循环。
public static List<User> getThree(List<User> input, int id) {
int i = 0;
while (i < input.size() && input.get(i).id != id) i++;
List<User> res = new ArrayList<>();
res.add(input.get(i - 1));
res.add(input.get(i));
res.add(input.get(i + 1));
return res;
}
这当然假设没有非法情况,其中i - 1
或i + 1
可能超出范围,但您可以为此添加检查,例如
if (i - 1 >= 0))
要么
if (i + 1 < input.size())
在相应的行之前。
可能有多种方法,但这是实现它的方法之一:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class User{
int id;
String nickName;
int score;
User(int id, String nickName, int score){
this.id = id;
this.nickName = nickName;
this.score = score;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(id).append(" ").append( nickName ).append(" ").append(score);
return sb.toString();
}
}
public class JavaList {
Map<Integer, Integer> idxMap;
List<User> users;
public JavaList() {
idxMap = new HashMap<>();
users = new ArrayList<>();
users.add(new User(3, "John", 90));
idxMap.put(3, 0);
users.add(new User(2, "Mike", 80));
idxMap.put(2, 1);
users.add(new User(4, "Davi", 30));
idxMap.put(4, 2);
users.add(new User(5, "Ana", 20));
idxMap.put(5, 3);
users.add(new User(6, "Jane", 10));
idxMap.put(6, 4);
}
public List<User> findThreeRecords(int id){
if (! idxMap.containsKey(id)) throw new IllegalArgumentException("Invalid User id");
int index = idxMap.get(id);
List<User> resultList = new ArrayList<>();
if (index-1 >= 0) resultList.add(users.get(index-1));
resultList.add(users.get(index));
if (index < users.size() ) resultList.add(users.get(index+1));
return resultList;
}
public static void main(String[] args) {
JavaList javaList = new JavaList();
List<User> res = javaList.findThreeRecords(2);
System.out.println(res);
//This will print [3 John 90, 2 Mike 80, 4 Davi 30]
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.