我的对象列表可以包含这些元素 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个...... 如何使用循环或流清除原始列表?
答案 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
这将融合相邻和重叠的范围,然后按降序处理结果范围。