Java 8.对象列表。想要根据规则保持基于财产的区别

时间:2016-10-19 17:05:50

标签: java-8 java-stream

有没有人知道如何简洁地编写一个java 8类型的不同函数来流式传输用户点击列表并使其不同(基于url),但保留一个时间戳更晚的时间戳?

action=click, url=www.google.com, timestamp=10
action=click, url=www.google.com, timestamp=20
action=click, url=www.abc.com/123, timestamp=10
action=click, url=www.grassisgreener.com, timestamp=10
action=click, url=www.grassisgreener.com, timestamp=46

最终结果应该是

action=click, url=www.google.com, timestamp=20
action=click, url=www.abc.com/123, timestamp=10
action=click, url=www.grassisgreener.com, timestamp=46

1 个答案:

答案 0 :(得分:3)

一个想法是将列表的内容收集到地图中,其中每个元素的键是url,用户点击元数据的值以及用于解决冲突的函数将保留具有最高时间戳的输入:

.stream().collect(toMap(e -> e.getUrl(),
                        e -> e,
                        (e1, e2) -> e1.getTimestamp() > e2.getTimestamp() ? e1 : e2));

从那里,您可以获取此地图的值,该地图将为您提供每个不同网址的最新点击的集合。