java - 将 Java ArrayList 修剪为具有最新日期的不同行

标签 java arraylist

我有一个MyDataList,如下所示。 它由多行 MyData 对象组成。 有些具有相同的key,但不同的datename

public class MyData {
    String name;
    String key;
    String date;
    // ... constructor and other codes omitted here
}

List<MyData> myDataList;

我正在考虑根据最新的日期将列表修剪为不同的key

例如如果我有

*Name* *key* *date*
 ABC    12    2016-10-09
 FGH    10    2016-10-18
 IJK    10    2016-10-08
 DEF    12    2016-10-19

那么修剪结果应该是

*Name* *key* *date*
 DEF    12    2016-10-19
 FGH    10    2016-10-18

通过算法实现此目的的最佳方法是什么?

注意:我使用的是 Java 7,无法使用 Java 8 的 Stream 功能。(这是针对 Android 开发的,尚不支持 Java 8)。

最佳答案

假设您对 date 属性使用真实日期类型,您可以这样做:

private Collection<MyData> trim(List<MyData> data) {
    Map<String, MyData> result = new HashMap<>();
    for (MyData item : data) {
        MyData lastItem = result.get(item.getKey());
        if (lastItem == null || lastItem.getDate().before(item.getDate())) {
            result.put(item.getKey(), item);
        }
    }
    return result.values();
}

您可能可以使用流达到相同的结果。

关于java - 将 Java ArrayList 修剪为具有最新日期的不同行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40283689/

相关文章:

java - 2 HashMap 之间的相等性

java - 如何更改 WebView 高度?

java - 如何连接不同类中的多个ArrayList。 (java银行程序)

java - 如何分离字符串

java - 为什么设置ArrayList时不需要返回值?

Java,通过各种标签拆分一个String并存入一个Map

java - 使用 JDBC ResultSet 构建 XML 文档对象

java - 如何使用 Java 中的日历计算从今天开始的 30 天

java - 将一个列表中的项目添加到java中的另一个列表中

java - 遍历对象数组列表并从重复对象中获取最大数量值