js中对一个下例的js数组

const arr = [
  { id: 1, name: “a”, age: 12 },
  { id: 2, name: “b”, age: 15 },
  // ...
]

进行按age的降序排序(高 -> 低) 需要通过sort的callback来控制
代码实现: arr.sort((a, b) => b.age - a.age);

上述的数组arr在java中大多时候是用List来实现的(因为arr.length不一定)
这样的代码在java中

Public class ItemDto {
  private Integer id;
  private String name;
  private Integer age;
}

List<ItemDto> itemList = Arrays.asList(
    new ItemDto(1, "Item 1", 30),
    new ItemDto(2, "Item 2", 25),
    new ItemDto(3, "Item 3", 35)
);

而对这样的itemList,同样实现按age降序排序的话,则有两种做法

// 其一是先comparing 默认升序,再reversed()
List<ItemDto> sortedDescending = itemList.stream()
    .sorted(Comparator.comparing(ItemDto::getAge).reversed())
    .collect(Collectors.toList()); 

// 其二是使用了 Comparator.comparing() 方法的重载版本
// 将 Comparator.reverseOrder() 作为第二个参数传递给 comparing() 方法,这样也可以实现按照属性降序排序。
List<ItemDto> sortedDescending = itemList.stream()
    .sorted(Comparator.comparing(ItemDto::getAge, Comparator.reverseOrder()))
    .collect(Collectors.toList());

对比js和java的排序实现,最明显的感知是java代码量更多,java 的语法和类型系统决定了它需要更多的代码来实现类似的排序。

在排序过程中,js用了回调函数作为参数控制排序结果,而java中都是Java中是交由Comparator接口来实现。

在js中,.sort() 方法是原地排序数组的,而在java中,.sorted() 方法返回一个新的排序后的流或集合。

同步更新到自己的语雀
https://www.yuque.com/dirackeeko/wxkg90/isxlyuoz93ehqh0p


DiracKeeko
125 声望2 粉丝