首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java列表中获取前一项、当前项和下一项的最佳方法

从Java列表中获取前一项、当前项和下一项的最佳方法
EN

Stack Overflow用户
提问于 2020-11-12 03:26:44
回答 2查看 78关注 0票数 0

我有一个对象用户

代码语言:javascript
复制
User
 id: Integer
 nickname : String
 score: Integer

以及一份按分数排序的用户列表:

代码语言:javascript
复制
id  name    score
3   John    90
2   Mike    80
4   Davi    30
5   Ana     20
6   Jane    10

我需要一个函数,该函数返回Id由params、前一个值和next传递的用户

例:婴儿车id = 4:

代码语言:javascript
复制
2   Mike    80
4   Davi    30
5   Ana     20

但是当id有最大分数返回时

例:婴儿车id = 2:

代码语言:javascript
复制
3   John    90
2   Mike    80
4   Davi    30

我需要总是返回一个包含3个值的列表

做这个功能的最佳方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-12 04:14:02

你不需要什么特别的东西,只是一个简单的循环。

代码语言:javascript
复制
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 - 1i + 1可能超出范围,但您可以添加检查,例如

代码语言:javascript
复制
if (i - 1 >= 0))

代码语言:javascript
复制
if (i + 1 < input.size()) 

在相应的行之前。

票数 1
EN

Stack Overflow用户

发布于 2020-11-12 03:49:18

可能有多种方法,但这是实现它的方法之一:

代码语言:javascript
复制
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]
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64797456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档