当hashmap值是多个属性java 8的对象列表时,如何排序

Vit*_*lyT 3 java java-8

假设我喜欢:

  Map<String, List<MyState>> map = new HashMap<>();
  map.computeIfAbsent(key, file -> new ArrayList<>()).add(myState);


  map.put("aa",list1..)
  map.put("bb",list2..)
  map.put("cc",list3..)

public class MyState {
    private String state;
    private String date;
}
Run Code Online (Sandbox Code Playgroud)

我要地图值进行排序List<MyState>MyState::date,然后通过 MyState::state

Ous*_* D. 7

您可以这样做:

Comparator<MyState> comparator = Comparator.comparing(MyState::getDate)
                                        .thenComparing(MyState::getState);
map.values()
   .forEach(l -> l.sort(comparator));
Run Code Online (Sandbox Code Playgroud)

  • 应该是`thenComparing`块中的`MyState :: getState`吗? (3认同)
  • 但在任何一种情况下,在`forEach`之前创建一次比较器而不是为每个map条目重新创建它可能有一个点.对于`HashMap`,`map.forEach((k,l) - > ...)`和`map.values().forEach(l - > ...)`之间没有性能差异. (3认同)