Java-8:如何使用 Map.Entry#comparingByValue 对 Map(基于值)进行排序,同时忽略大小写?
Java-8: How to sort Map (based on values) using Map.Entry#comparingByValue while ignoring case sensitivity?
我想根据值的字母顺序并忽略区分大小写和 return 键列表对 Map 进行排序。
/**
* This method will sort allCostPlanDetailsRows based on Value in <Key,Value> pair
*
* @param sortingOrder_ whether to sort the LinkedHashMap in Ascending order or Descending order
* @return List<String> returns List of costPlanDetailsRowId in sorted order
*/
private List<String> sortCostPlanDetailRows( SortingOrder sortingOrder_ )
{
return _allCostPlanDetailRows
.entrySet()
.stream()
.sorted( sortingOrder_ == SortingOrder.DESC ? Map.Entry.<String, String>comparingByValue(Comparator.nullsFirst(Comparator.naturalOrder())).reversed() : Map.Entry.comparingByValue(Comparator.nullsFirst(
Comparator.naturalOrder())) )
.map( Map.Entry::getKey )
.collect( Collectors.toList() );
}
我怎样才能做到这一点?
注意:如果我可以改进以上代码,欢迎提出建议。
您可以使用 String.CASE_INSENSITIVE_ORDER
:
而不是使用 naturalOrder
比较器
return _allCostPlanDetailRows
.entrySet()
.stream()
.sorted( sortingOrder_ == SortingOrder.DESC ? Map.Entry.<String, String>comparingByValue(Comparator.nullsFirst(String.CASE_INSENSITIVE_ORDER)).reversed() : Map.Entry.comparingByValue(Comparator.nullsFirst(
String.CASE_INSENSITIVE_ORDER)) )
.map( Map.Entry::getKey )
.collect( Collectors.toList() );
我想根据值的字母顺序并忽略区分大小写和 return 键列表对 Map 进行排序。
/**
* This method will sort allCostPlanDetailsRows based on Value in <Key,Value> pair
*
* @param sortingOrder_ whether to sort the LinkedHashMap in Ascending order or Descending order
* @return List<String> returns List of costPlanDetailsRowId in sorted order
*/
private List<String> sortCostPlanDetailRows( SortingOrder sortingOrder_ )
{
return _allCostPlanDetailRows
.entrySet()
.stream()
.sorted( sortingOrder_ == SortingOrder.DESC ? Map.Entry.<String, String>comparingByValue(Comparator.nullsFirst(Comparator.naturalOrder())).reversed() : Map.Entry.comparingByValue(Comparator.nullsFirst(
Comparator.naturalOrder())) )
.map( Map.Entry::getKey )
.collect( Collectors.toList() );
}
我怎样才能做到这一点?
注意:如果我可以改进以上代码,欢迎提出建议。
您可以使用 String.CASE_INSENSITIVE_ORDER
:
naturalOrder
比较器
return _allCostPlanDetailRows
.entrySet()
.stream()
.sorted( sortingOrder_ == SortingOrder.DESC ? Map.Entry.<String, String>comparingByValue(Comparator.nullsFirst(String.CASE_INSENSITIVE_ORDER)).reversed() : Map.Entry.comparingByValue(Comparator.nullsFirst(
String.CASE_INSENSITIVE_ORDER)) )
.map( Map.Entry::getKey )
.collect( Collectors.toList() );