Java Streams在同一列表上循环两次

drdz13:

我是Java 8的新手,由于某种原因我在理解流时遇到问题。假设我们有一个对象列表List <MyObject>,其中MyObject有2个字段:Long Id,Date insertTime和我想删除具有相同ID和更早时间的元素。

与2 for循环是这样的:

for(MyObject object : myObjects) {
   for(MyObject tmpObject : myObjects) {
      if(object.getId() == tmpObject.getId()) {
         if(object.getInsertDate().after(tmpObject.getInsertDate())) 
           myObjects.remove(tmpObject);
         else 
           myObjects.remove(object);
      }
   }
}

使用流时,外观如何?

@迈克尔,我不好。比我需要另一个列表或数组来存储响应数据。

假设我有

  1. 1234:25/5/1991
  2. 1235:25/5/1995
  3. 1234:25/5/1999

所以我需要

  1. 1235:25/5/1995
  2. 1234:25/5/1999

谢谢你们。

加根·辛格:

按ID分组,然后为每个ID选择插入日期最大的ID。您可以用MyObject替换Sample。

    Map<Long, List<Sample>> map = list.stream().collect(Collectors.groupingBy(Sample::getId));
    map.values().stream()
            .map(samples -> Collections.max(
                    samples, Comparator.comparing(Sample::getInsertDate)))
            .collect(Collectors.toList());

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章