Java中Map的键和合并值排序



我的Map是这样的:

Map<Date, List<T>> data = new HashMap<Date, List<T>>();

在for循环中,数据被添加到这个数据映射中。

现在我必须将整个Map的Value列合并到单个List<T>。合并应该按照Key为Data的升序进行。

我写了这样一个foreach循环:

List<T> newData = new List<T>(); 
Iterator<Map.Entry<Date , List<T>>> itr = data.entrySet().iterator();

while(itr.hasNext())
{
Map.Entry<date, List<T>> entry = itr.next();
newData.addAll(entry.getValue());
}

在添加到newData变量之前,我如何通过日期(键)进行此订单?

使用流管道要容易得多,它可以让您在一个语句中完成这两个操作:

List<T> newData =  data.entrySet().stream()
.sorted(Entry.comparingByKey())
.map(Entry::getValue)
.flatMap(List::stream)
.collect(Collectors.toList());

Entry.comparingByKey()将给出一个比较器,它使用键(您的日期对象)对流进行排序。

请注意,您的T对象将被包含在结果列表中,仅基于它们对应的Date键,在结果列表中不会对T值进行任何排序(除非它们已经在最初添加到映射的所有较小列表中排序)。

//如果你已经有了"data"hashmap。否则,您可以直接添加到TreeMap。

TreeMap<Date, List<T>> yourSortedMap = new TreeMap<>(data);
Iterator<Map.Entry<Date , List<T>>> itr = yourSortedMap.entrySet().iterator();

while(itr.hasNext())
{
Map.Entry<date, List<T>> entry = itr.next();
newData.addAll(entry.getValue());
}

相关内容

  • 没有找到相关文章

最新更新