【Java】一个List按照另一个List的数据顺序来排序

需求:tartgetList 需按照另一个 list 里的数据的顺序排序。

public class ListOrder {
    public static void main(String[] args) {
      List<String> list = Arrays.asList("B2C", "O2O", "A");
      
      List<User> targetList = new ArrayList<User>();
      
      User user1 = new User();
      user1.setId("1");
      user1.setName("B2C");
      user1.setAge(10);
      
      User user2 = new User();
      user2.setId("2");
      user2.setName("O2O");
      user2.setAge(18);
      
      User user3 = new User();
      user3.setId("3");
      user3.setName("A");
      user3.setAge(38);
      
      User user4 = new User();
      user4.setId("4");
      user4.setName("AA");
      user4.setAge(50);

      
      targetList.add(user1);
      targetList.add(user2);
      targetList.add(user3);
      targetList.add(user4);
      
      System.out.println("排列前的数据:");
        targetList.forEach(t -> System.out.print(t.getName() + "~" + t.getAge() + "  "));
        System.out.println();

      
      // 排序
	  setListOrder(list, targetList);
      
      System.out.println("排序的规则:");
        list.forEach(t -> System.out.print(t + " "));
        System.out.println();
        System.out.println("排列后的数据:");
        targetList.forEach(t -> System.out.print(t.getName() + "~" + t.getAge() + " "));
      
    }
public static void setListOrder(List<String> orderRegulation, List<FruitLongAnChannelAndGrandRespVo> targetList) {
        // 按照 list 里的 name 来排序 targetList
        Collections.sort(targetList, ((o1, o2) -> {
            int io1 = orderRegulation.indexOf(o1.getName());
            int io2 = orderRegulation.indexOf(o2.getName());

            if (io1 != -1) {
                io1 = targetList.size() - io1;
            }
            if (io2 != -1) {
                io2 = targetList.size() - io2;
            }

            return io2 - io1;
        }));
    }

在这里插入图片描述

注意:
该排序适用于数据内容一致(类型一致),顺序不相同的情况。 targetList中多出来的数据,排在新的List数组的最后。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨幂等

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值