从Java列表中获取上一项、当前项和下一项的最佳方法是什么
我有一个对象用户从Java列表中获取上一项、当前项和下一项的最佳方法是什么,java,list,Java,List,我有一个对象用户 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 我需要一个函数,该函数返回用户Id,并通过参数、上一个值和下一个值传递 例如:婴儿车id=4: 2 Mike 80 4 Davi 30 5
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
我需要一个函数,该函数返回用户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个值的列表
实现此功能的最佳方法是什么?可能有多种方法,但这是实现此功能的方法之一:
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]
}
}
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
类用户{
int-id;
字符串昵称;
智力得分;
用户(整数id、字符串昵称、整数分数){
this.id=id;
this.昵称=昵称;
这个分数=分数;
}
@凌驾
公共字符串toString(){
StringBuilder sb=新的StringBuilder();
附加(id)。附加(“”)。附加(昵称)。附加(“”)。附加(分数);
使某人返回字符串();
}
}
公共类JavaList{
地图idxMap;
列出用户名单;
公共JavaList(){
idxMap=newhashmap();
users=newarraylist();
添加(新用户(3,“John”,90));
idxMap.put(3,0);
添加(新用户(2,“Mike”,80));
idxMap.put(2,1);
添加(新用户(4,“Davi”,30));
idxMap.put(4,2);
添加(新用户(5,“Ana”,20));
idxMap.put(5,3);
添加(新用户(6,“Jane”,10));
idxMap.put(6,4);
}
公共列表查找到的三条记录(int id){
如果(!idxMap.containsKey(id))抛出新的IllegalArgumentException(“无效用户id”);
int index=idxMap.get(id);
List resultList=new ArrayList();
如果(index-1>=0)resultList.add(users.get(index-1));
add(users.get(index));
if(index
你不需要任何特殊的东西,只需要一个简单的循环
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;
}
或
if(i+1
在相应的行之前。在java中不能有多个返回值。请指定从方法返回对象的方式。我需要一个包含3个用户的用户列表。这是一个简单的XY问题。您只需要在排序列表中显示给定用户范围内的3个用户。您可以通过对索引的简单引用(例如,相邻用户是
i-1
和i+1
)或子列表或许多其他方式来实现这一点。但在你意识到问题的实质之前,不要局限于一个解决方案(你会得到比你应得的更多的头痛)
if (i - 1 >= 0))
if (i + 1 < input.size())