Java扩展集合过滤
我必须使用对象对 ArrayList 进行过滤和排序。
- 每个对象都有2个整数对 => 每个对象 4 个整数。
- Column_1 的每个值 Column_2 和
- Column_3 的每个值 Column_4。
...所以每一对代表一个距离。
1.) 第一个(Column_1,Column_2)对和第二个(Column_3,Column_4,)对中的距离必须相等。
2.) 如果列表中存在 Obj_1 ,其 Column_2 值等于 Obj_2 的 Column_1 值+1 和
3.) 如果列表中存在 Obj_1 ,其 Column_4 值等于 Obj_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中如何实现这种过滤呢?
I have to filter and to sort a ArrayList wíth objects.
- Every object has 2 integer pairs => 4 ints per Object.
- Every value of Column_1 < Column_2 and
- Every value of Column_3 < Column_4.
... so each pair represents a distance.
1.) Distance in 1st(Column_1,Column_2) pair and 2nd(Column_3, Column_4,) pair have to be equal.
2.) if there exists in the list a Obj_1 , whose Column_2 value is equal to Column_1 value+1 of Obj_2 and
3.) if there exists in the list a Obj_1 , whose Column_4 value is equal to Column_3 value+1 of Obj_2
then this objects should be merged to one Object respecting values in each pair. ...minimal values in(Column_1,Column_3) and maximal values(Column_2,Column_4)
Example:
Column_1 Column_2 Column_3 Column_4
----------- before filtering --------------
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
-----------after filtering----------
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
How can this kind of filtering be done in Java?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我的第一个方法是Comparable
(或编写一个Comparator
),equals 方法实现相同的逻辑,
TreeSet
将按自然顺序(或使用提供的Comparator
)对其元素进行排序。精炼方法
不幸的是,我没有注意到不同的对象可能包含重叠间隔,因此要合并的项目可能不相邻。对上述内容的改进可以是:
Comparable
equals
方法),My first approach would be toComparable
(or write aComparator
) based on the logic described above,equals
method implementing the same logic,ArrayList
into aTreeSet
,TheTreeSet
will order its elements by natural ordering (or using a providedComparator
).Refined approach
Unfortunately I failed to notice that distinct objects may contain overlapping intervals, thus items to be merged may not be adjacent. An improvement to the above could be:
Comparable
based on Columns 1 and 3,equals
method comparing all columns),ArrayList
,Google 集合让您可以选择指定将对所有条目进行操作的过滤谓词并决定保留哪些:
Google collections gives you the option to specify a filter predicate that will operate on all entries and decide which to preserve: