Java-8:如何使用Map.Entry#comparisonByValue对Map进行排序(基于值)而忽略区分大小写?

时间:2017-05-29 06:41:03

标签: java string java-8 java-stream case-insensitive

我想按字母顺序对值进行排序,忽略区分大小写并返回键列表。

 /**
   * 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() );
  }

我怎样才能做到这一点?

注意:如果我能改进上面的代码,欢迎提出建议。

1 个答案:

答案 0 :(得分:7)

您可以使用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() );