从List <object>中删除多个元素范围

时间:2018-05-24 11:12:41

标签: java collections java-stream

我的对象列表可以包含这些元素 EG1:

[vale11, value12, value13, null, null, null, value21, value22, value23, value31, value32, value33]

EG2:

[vale11, value12, value13, null, null, null, null, null, null, value31, value32, value33]

EG3:

[vale11, value12, value13, null, null, null, value21, value22, value23, null, null, null]

eg4:

[vale11, null, value13, null, null, null, value21, value22, value23, value31, value32, null]

我想删除空值但不是全部(注意 eg4 ),只有某个范围内的那些值从某个索引开始。 所以在 eg1 中会是这样的:

list.sublist(3, 6).clear();

EG2

list.sublist(3, 6).clear();
list.sublist(6, 9).clear();//it's not going to work

我知道起始索引和一些下一个元素(总是相同的)

有时它会是1个范围,有时是3个,5个...... 如何使用循环或流清除原始列表?

3 个答案:

答案 0 :(得分:2)

您可以稍微改变一下您的技巧:在降序顺序的初始索引上订购范围。这里的基本原理是,只要您从较高的索引转到较低的索引,并且范围不会“交叉”,索引将保持一致。

因此,清除sublist(6, 9)后跟sublist(3, 6)将毫无问题地工作:

//  0        1       2       3     4     5     6     7     8      9       10       11
[vale11, value12, value13, null, null, null, null, null, null, value31, value32, value33]
//                                           ^^^^^^^^^^^^^^^^ [6, 9)
//                         ^^^^^^^^^^^^^^^^ [3, 6)

答案 1 :(得分:0)

使用可以循环:

以下方法将删除var dataItems = [ { "title": "2017/02/04", "shifts": [ { "startTime": "05:30:00", "endTime": "05:30:00", "items": [ { "quantities": { "itemA": 600 } }, { "quantities": { "itemB": 400 } },{ "quantities": { "itemC": 500 } }, ] } ] }, { "title": "2017/04/04", "shifts": [ { "startTime": "05:30:00", "endTime": "05:30:00", "items": [ { "quantities": { "itemA": 720 } }, { "quantities": { "itemB": 1000 } },{ "quantities": { "itemC": 850 } }, ] } ] }, { "title": "2017/05/04", "shifts": [ { "startTime": "05:30:00", "endTime": "05:30:00", "items": [ { "quantities": { "itemA": 450 } }, { "quantities": { "itemB": 800 } },{ "quantities": { "itemC": 1000 } }, ] } ] } ];

的元素
startIndex <= index <= endIndex

答案 2 :(得分:0)

如果您要从/storage/0A17-1D03/Test中删除null个元素,可以像

一样简单
List

当然,您可以将操作限制在某个范围内,例如

list.removeIf(Objects::isNull);

如果实际任务是从列表中删除预定义范围(并且这些地方可能有list.subList(start, end).removeIf(Objects::isNull); 个元素的信息实际上不相关),您可以使用this answer(处理范围)如果范围不重叠,则降序排列。

如果范围可能重叠,您可以使用

null

这将融合相邻和重叠的范围,然后按降序处理结果范围。