我的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());
}