Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java列表中获取上一项、当前项和下一项的最佳方法是什么_Java_List - Fatal编程技术网

从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())