我必须过滤并使用对象对ArrayList进行排序
- 每个对象都有 2 整数对 => 每个对象4个英尺
- Column_1<的每个值Column_2 和
- Column_3<的每个值Column_4 即可。
......所以每对代表一段距离。
1.)第1(Column_1,Column_2)对和第2(Column_3,Column_4,)对中的距离必须相等。
2。)如果列表中存在Obj_1,其Column_2值等于Ob_1的Column_1值+ 1和
3。)如果列表中存在Obj_1,其Column_4值等于Ob__2的Column_3值+ 1
然后应该将这些对象合并到一个对象中,并尊重每对中的值。 ...(Column_1,Column_3)中的最小值和最大值(Column_2,Column_4)
示例:
Column_1 Column_2 Column_3 Column_4
过滤之前<----> ----------- --------------
1. 506 520 771 785
2. 106 110 210 214
3. 502 505 181 184
4. 714 717 270 273
5. 106 110 310 314
6. 111 115 215 219
7. 521 524 767 770
8. 502 505 350 353
9. 100 105 204 209
-----------过滤后----------
1. 100 115 204 219
2. 106 110 310 314
3. 502 505 181 184
4. 714 717 270 273
5. 502 520 767 785
如何在Java中完成这种过滤?
答案 0 :(得分:2)
我的第一个方法是
Comparable
(或写一个Comparator
),equals
方法,ArrayList
的内容填入TreeSet
, TreeSet
将按自然顺序(或使用提供的Comparator
)对其元素进行排序。
不幸的是,我没有注意到不同的对象可能包含重叠的间隔,因此要合并的项目可能不相邻。对上述内容的改进可能是:
Comparable
equals
方法),ArrayList
,答案 1 :(得分:1)
Google collections为您提供了指定过滤谓词的选项,该谓词将对所有条目进行操作并决定保留哪个:
Collections2.filter(yourCollection, new Predicate<YourType>() {
@Override
public boolean apply(YourType param) {
// return whether to retain or remove
}
});