代码之家  ›  专栏  ›  技术社区  ›  Grumblesaurus

是否有更简洁的方法使用lambda表达式来编写此方法?

  •  5
  • Grumblesaurus  · 技术社区  · 6 年前

    我正在按“相册”数组的方法输出进行排序 getAlbumArtist() ,使用自定义比较器类alphanumcomparator,它有一个方法 compare ,它比较两个字符串。

    我有以下代码,可以工作:

    AlphanumComparator comparator = new AlphanumComparator ( CaseHandling.CASE_INSENSITIVE );
    
    Arrays.sort( albumArray, ( Album a, Album b ) -> {
        return comparator.compare( a.getAlbumArtist(), b.getAlbumArtist() );
    });
    

    这似乎是一种代码,可以用Java中的一些新的语言特征来简化/更清楚,但是我不能很好地使这些部分适合。是可能的,还是尽可能的考虑?

    3 回复  |  直到 6 年前
        1
  •  7
  •   talex    6 年前

    我建议你用

        Arrays.sort(albumArray, Comparator.comparing(Album::getAlbumArtist, comparator));
    
        2
  •  2
  •   Ravindra Ranwala    6 年前

    你可以这样做,

    Album[] sortedAlbums = Arrays.stream(albumArray)
        .sorted(Comparator.comparing(a -> a.getAlbumArtist().toLowerCase()))
        .toArray(Album[]::new);
    
        3
  •  1
  •   Dang Nguyen    6 年前

    假定 albumArray 是一个 list ,你可以这样做

    albumArray.sort(Comparator.comparing(Album::getAlbumArtist, String.CASE_INSENSITIVE_ORDER));
    

    否则你可以这样做

    Arrays.sort(albumArray, Comparator.comparing(Album::getAlbumArtist, String.CASE_INSENSITIVE_ORDER));