在Java中选择ArrayList中最后25%的对象

在Java中选择ArrayList中最后25%的对象,java,list,arraylist,Java,List,Arraylist,我试图选择列表中第一个和最后25%的对象,并将它们插入第二个列表。我已经计算了百分比并创建了一个循环来选择前25%的对象,但我不知道如何选择列表中最后25%的对象 List<NodeObject> selectedNodes = new ArrayList(); //Calculate the percentage double listLength = nodes.size(); double percentage = (listLength / 100) * 25; int l

我试图选择列表中第一个和最后25%的对象,并将它们插入第二个列表。我已经计算了百分比并创建了一个循环来选择前25%的对象,但我不知道如何选择列表中最后25%的对象

List<NodeObject> selectedNodes = new ArrayList();

//Calculate the percentage
double listLength = nodes.size();
double percentage = (listLength / 100) * 25;
int listQuarter = (int) percentage;

//Select first 25%
for (int i = 0; i < listQuarter; i++) {
    NodeObject node = nodes.get(i);
    selectedNodes.add(node);
    }
List selectedNodes=new ArrayList();
//计算百分比
double listLength=nodes.size();
双百分比=(列表长度/100)*25;
int listQuarter=(int)百分比;
//选择前25%
对于(int i=0;i
好吧,如果你想继续做你正在做的事情,只需向后循环

// Select last 25%
for (int i = nodes.size()-1; i > nodes.size()-listQuarter; i--) {
    NodeObject node = nodes.get(i);
    selectedNodes.add(node);
}

它比看起来简单。只需从上一季度开始迭代,然后在列表长度处结束,如下所示:

//Select last 25%
for (int i = listLength - listQuarter; i < listLength; i++) {
    NodeObject node = nodes.get(i);
    selectedNodes.add(node);
}
//选择最后25%
for(int i=listLength-listQuarter;i
使用
子列表
获取列表的一部分,使用
addAll
一次将其全部添加到另一个列表:

selectedNodes.addAll(nodes.subList(listLength - listQuarter, listLength));
除了简洁之外,这更有效,因为
selectedNodes
知道它将添加一定数量的元素,因此它可以一次性对其内部结构进行必要的更改,而不是一次只做一件事

double percentage = (listLength / 100) * 25;
这对于小于100的列表不起作用(它返回0)。对于较小的值,它也会产生非常错误的结果,因为除法是用整数而不是双精度进行的,并且只有在计算就绪时,结果才会转换为双精度。正确的方法是在除法中使用double,这迫使编译器将中间结果视为double

double percentage = (listLength / 100.0) * 25;
或者简而言之:

double percentage = listLength * 0.25;

下面是一个使用
限制
跳过
的流解决方案:

var list=list.of(1,2,3,4,5,6,7,8,9,10);
//最后25%
list.stream()
.skip(Math.round(list.size()*0.75))
.collect(Collectors.toList());
//前25%
list.stream()
.limit(数学四舍五入(list.size()*0.25))
.collect(Collectors.toList());

而是使用一个映射并遍历它来获取VAL。为什么你什么都知道+1.