java 8 lambda sort_java8 lambda表达式之List排序

本文通过实例代码讲解了Java 8中使用Lambda表达式对List进行排序的方法,包括字符串排序、自定义对象属性排序以及使用静态方法引用等多种方式。示例代码展示了如何根据字符串的大小写不敏感顺序以及自定义类的属性进行排序。
摘要由CSDN通过智能技术生成

packagecom.fyb.test;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collections;importjava.util.Comparator;importjava.util.List;importjava.util.ListIterator;public classListSortTest {public static voidmain(String[] args) {

List list = new ArrayList();

list.add("004");

list.add("002");

list.add("003");

list.add("001");//字符串测试

Arrays.asList(list.toArray(new String[0])).sort(String.CASE_INSENSITIVE_ORDER.reversed());

printList(list);//listIterator测试

ListIterator ls =list.listIterator();while(ls.hasNext()){

System.out.println(ls.next());

}

List listConsumer = new ArrayList(3);

listConsumer.add(new Consumer(1, "13838381438"));

listConsumer.add(new Consumer(3, "13838381439"));

listConsumer.add(new Consumer(2, "13838381440"));

List listConsumerTmp =cloneList(listConsumer);//Lambda表达式

listConsumerTmp.sort((final Consumer c1, final Consumer c2)->c1.getId().compareTo(c2.getId()));

printList(listConsumerTmp);//没有类型定义的Lambda表达式

listConsumerTmp =cloneList(listConsumer);

listConsumerTmp.sort((c1, c2)->c1.getId().compareTo(c2.getId()));

printList(listConsumerTmp);//使用静态方法的引用

listConsumerTmp =cloneList(listConsumer);

listConsumerTmp.sort(Consumer::compareById);

printList(listConsumerTmp);//使用静态方法的引用 (这种方式编译通过,运行报错,待找原因)

listConsumerTmp =cloneList(listConsumer);

Collections.sort(listConsumerTmp, Comparator.comparing(Consumer::getMobile));

printList(listConsumerTmp);

}/*** 打印list

*@paramlist*/

public static void printList(Listlist){

System.out.println("********* printList ************");//迭代器列表

list.stream().forEach((ls)->{

System.out.println(ls);

});

}public static List cloneList(Listlist){

List cloneList = new ArrayList(list.size());

ListIterator lts =list.listIterator();while(lts.hasNext()){

cloneList.add(lts.next());

}returncloneList;

}/*** 客户

*@authorfybing

**/

public static classConsumer{privateInteger id;privateString mobile;publicConsumer(Integer id, String mobile){this.id =id;this.mobile =mobile;

}publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getMobile() {returnmobile;

}public voidsetMobile(String mobile) {this.mobile =mobile;

}

@OverridepublicString toString() {return "id="+id+";mobile="+mobile;

}

@Overrideprotected Consumer clone() throwsCloneNotSupportedException {

Consumer consumer= null;try{

consumer= (Consumer)super.clone();

}catch(CloneNotSupportedException e){

e.printStackTrace();

}returnconsumer;

}public static intcompareById(Consumer c1, Consumer c2){if(c1.getId() >c2.getId()){return -1;

}else if(c1.getId() ==c2.getId()){return 0;

}return -0;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值