java 策略模式,list集合,实现id 姓名年龄正序倒序排序(如果年龄或者姓名重复,按id正序排序)

c++list容器简单实现排序 #include<iostream> #include<string> #include<list> using namespace std; class Person { public: Person(string name, int age, int height) { m_Name = name; m_Age = age; m_Height = height; } string m_Name; int m_Age; int m_Height; 阅读详情

策略模式:1.抽象策略类,通常由一个接口或者抽象类实现。 2.具体实现类 3.环境角色类,持有一个策略类的引用,最终给客户端调用。

好了,上代码:

package execrise;
import java.util.List;
/**
 * 接口
 * @author Administrator
 * 2013年5月2日 18:57:16
 */
public interface Strange
{
  public void sort(List<Person> list,int i);
}

 

package execrise;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
 * 具体实现类
 * @author Administrator
 * 2013年5月2日 18:56:23
 */
public class FindByID implements Strange
{

 public int k;
 @Override
 public void sort(List<Person> list, int i)
 {
  System.out.println("i==" + i);
  if (i == 1)// j=1 倒序
  {
   this.k = i;
   Collections
     .sort(list, Collections.reverseOrder(new MyComparator()));
  }
  else if (i == 0)// i=0 正序
  {
   Collections
     .sort(list, Collections.reverseOrder(new MyComparator()));
  }
  else
  {
   System.out.println("请输入0或者1(0代表正序,1代表倒序) ");
  }
 }

 private class MyComparator implements Comparator<Person>
 {
  @Override
  public int compare(Person o1, Person o2)
  {
   /*
    * 我当时纳闷,我没有调用compare()方法,我们知道Collections.reverseOrder()括号里是一个指定的比较器,
    * 可是我怎么确定我的compare()方法起作用,被调用呢???于是有了如下打印语句。证明确实调用了自己重写的方法。
    * 那谁调用呢???? 一定是reverseOrder()这个方法。于是跟踪源码。如下: public static <T>
    * Comparator<T> reverseOrder(Comparator<T> cmp) { if (cmp == null)
    * return reverseOrder(); return new ReverseComparator2<T>(cmp); }
    * 继续跟踪 ---> ReverseComparator2....源码如下:
    *
    * private static class ReverseComparator2<T> implements
    * Comparator<T>,Serializable { private static final long
    * serialVersionUID = 4374092139857L; private Comparator<T> cmp;
    *
    * ReverseComparator2(Comparator<T> cmp) { assert cmp != null;
    * this.cmp = cmp; }
    *
    * public int compare(T t1, T t2) { return cmp.compare(t2, t1); } }
    *
    * 知道ReverseComparator2是个内部类,注意这句话 return cmp.compare(t2,
    * t1);这句就是调用我们自己的compare()方法。呵呵,低调低调。。。
    */
   System.out.print("1" + " ");
   if (k == 0)
   {
    System.out.print("2" + " ");
    return o2.getId() - o1.getId();/* 因为正序,所以根据第一个参数大于第二个参数返回正整数。 */
   }
   else
   {
    System.out.print("3" + " ");
    return o1.getId() - o2.getId();/*比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。*/
   }
  }
 }
}

 

package execrise;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 *
 * @author Administrator 2013年5月2日 18:57:55
 */
public class FindByName implements Strange
{

 int k;

 @Override
 public void sort(List<Person> list, int i)
 {
  if (i == 1)// j=1 倒序
  {
   this.k = i;
   Collections
     .sort(list, Collections.reverseOrder(new MyComparator()));
  }
  else if (i == 0)// i=0 正序
  {
   Collections
     .sort(list, Collections.reverseOrder(new MyComparator()));
  }
  else
  {
   System.out.println("请输入0或者1(0代表正序,1代表倒序) ");
  }
 }

 private class MyComparator implements Comparator<Person>
 {
  @Override
  public int compare(Person o1, Person o2)
  {
   if (k == 0)
   {
    return o2.getName().compareTo(o1.getName());
   }
   else
   {
    return o1.getName().compareTo(o2.getName());
   }
  }

 }

}

 

package execrise;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @author Administrator
 * 2013年5月2日 18:58:27
 */
public class FindByAge implements Strange
{
 int k;

 @Override
 public void sort(List<Person> list, int i)
 {
  if (i == 1)// j=1 倒序
  {
   this.k = i;
   Collections
     .sort(list, Collections.reverseOrder(new MyComparator()));
  }
  else if (i == 0)// i=0 正序
  {
   Collections
     .sort(list, Collections.reverseOrder(new MyComparator()));
  }
  else
  {
   System.out.println("请输入0或者1(0代表正序,1代表倒序) ");
  }
 }

 private class MyComparator implements Comparator<Person>
 {
  @Override
  public int compare(Person o1, Person o2)
  {
   if (k == 0)
   {
    return o2.getAge() - o1.getAge();
   }
   else
   {
    return o1.getAge() - o2.getAge();
   }
  }

 }
}

 

package execrise;

import java.util.List;

/**
 * 2013年5月2日 18:59:12
 *
 * @author Administrator
 *
 */
public class Envrioment
{

 Envrioment()
 {
 }

 Envrioment(Strange strange)
 {
  this.strange = strange;
 }

 private Strange strange;

 public Strange getStrange()
 {
  return strange;
 }

 public void setStrange(Strange strange)
 {
  this.strange = strange;
 }

 public void invoke(List<Person> list, int i)
 {
  strange.sort(list, i);
 }
}

 

package execrise;

import java.util.ArrayList;
/**
 * 2013年5月2日 19:01:02
 * @author Administrator
 * 客户端
 */
public class Client
{
 public static void main(String[] args)
 {
  ArrayList<Person> list = new ArrayList<Person>();
  Person p1 = new Person(1, "a", 34);
  Person p2 = new Person(2, "b", 24);
  Person p3 = new Person(3, "c", 24);
  Person p4 = new Person(4, "bb", 24);
  Person p5 = new Person(5, "ba", 24);
  Person p6 = new Person(6, "d", 24);
  Person p7 = new Person(7, "d", 24);
  Person p8 = new Person(8, "d", 25);
  Person p9 = new Person(9, "d", 25);

  list.add(p1);
  list.add(p2);
  list.add(p3);
  list.add(p4);
  list.add(p5);
  list.add(p6);
  list.add(p7);
  list.add(p8);
  list.add(p9);

  Envrioment e = new Envrioment();
  e.setStrange(new FindByID());
  int i = 0;// i=0 正序
  int j = 1;// j=1 倒序
  System.out.println("按照person id  正序排序");
   e.invoke(list, i);
   for(Person al:list)
   {
   System.out.println("id="+al.getId()+" name="+al.getName()+" age="+al.getAge());
   }
   System.out.println("按照person id  降序排序");
   e.invoke(list, j);
   for(Person a2:list)
   {
   System.out.println("id="+a2.getId()+" name="+a2.getName()+" age="+a2.getAge());
   }

   System.out.println("按照person name  正序排序,如果name相同,按照id正序排序");
   Envrioment e1 = new Envrioment(new FindByName());
   e1.invoke(list, i);
   for(Person al:list)
   {
   System.out.println("id="+al.getId()+" name="+al.getName()+" age="+al.getAge());
   }
  
   System.out.println("按照person name  降序排序,如果name相同,按照id正序排序");
   e1.invoke(list, j);
   for(Person a2:list)
   {
   System.out.println("id="+a2.getId()+" name="+a2.getName()+" age="+a2.getAge());
   }

  System.out.println("按照person age  正序排序,如果age相同,按照id正序排序");
  Envrioment e2 = new Envrioment(new FindByAge());
  e2.invoke(list, i);
  for (Person al : list)
  {
   System.out.println("id=" + al.getId() + " name=" + al.getName()
     + " age=" + al.getAge());
  }

  System.out.println("按照person age  降序排序,如果age相同,按照id正序排序");
  e2.invoke(list, j);
  for (Person a1 : list)
  {
   System.out.println("id=" + a1.getId() + " name=" + a1.getName()
     + " age=" + a1.getAge());
  }

 }

}

 

 

输出结果:

按照person id  正序排序
i==0
1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2

id=1 name=a age=34
id=2 name=b age=24
id=3 name=c age=24
id=4 name=bb age=24
id=5 name=ba age=24
id=6 name=d age=24
id=7 name=d age=24
id=8 name=d age=25
id=9 name=d age=25
按照person id  降序排序
i==1
1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3

id=9 name=d age=25
id=8 name=d age=25
id=7 name=d age=24
id=6 name=d age=24
id=5 name=ba age=24
id=4 name=bb age=24
id=3 name=c age=24
id=2 name=b age=24
id=1 name=a age=34
按照person name  正序排序,如果name相同,按照id正序排序
id=1 name=a age=34
id=2 name=b age=24
id=5 name=ba age=24
id=4 name=bb age=24
id=3 name=c age=24
id=9 name=d age=25
id=8 name=d age=25
id=7 name=d age=24
id=6 name=d age=24
按照person name  降序排序,如果name相同,按照id正序排序
id=9 name=d age=25
id=8 name=d age=25
id=7 name=d age=24
id=6 name=d age=24
id=3 name=c age=24
id=4 name=bb age=24
id=5 name=ba age=24
id=2 name=b age=24
id=1 name=a age=34
按照person age  正序排序,如果age相同,按照id正序排序
id=7 name=d age=24
id=6 name=d age=24
id=3 name=c age=24
id=4 name=bb age=24
id=5 name=ba age=24
id=2 name=b age=24
id=9 name=d age=25
id=8 name=d age=25
id=1 name=a age=34
按照person age  降序排序,如果age相同,按照id正序排序
id=1 name=a age=34
id=9 name=d age=25
id=8 name=d age=25
id=7 name=d age=24
id=6 name=d age=24
id=3 name=c age=24
id=4 name=bb age=24
id=5 name=ba age=24
id=2 name=b age=24


 

Java集合框架、并发修改异常、Lamabda表达式 javaList/map面试题 阅读详情

相关推荐

Second-Order Cone Programming(SOCP) 二阶锥规划

个人博客Glooow,欢迎各位老师来踩踩 文章目录1. 二阶锥1.1 二阶锥定义1.2 二阶锥约束2. 优化问题建模3. 类似问题转化3.1 二次规划3.2 随机线性规划4. 问题求解 1. 二阶锥 1.1 二阶锥定义 在此之前,先给出二阶锥的定义。 在 kkk 维空间中二阶锥 (Second-order cone) 的定义为 Ck={[ut]∣u∈Rk−1,t∈R,∥u∥≤t} \mathc...

Glooow的博客 3万+

Java中先按照姓名排序(姓名相同)在按照年龄排序(年龄相同)按照编号 排序呢 策略模式

实现过程也是用了java的策略模式的概念,刚好回顾以往所学知识。 1:定义比较对象属性 /* * 需要进行策略比较的对象 */ public class Person { private String name; private int Id; private int age; public Person(String name,int age,in...

6646

芯片设计-信号完整性 SI 解析:Unit Interval 与比特周期的关系及其在高速信号中的应用

本文深入解析了芯片设计中信号完整性(SI)的核心概念Unit Interval(UI)与比特周期的关系及其在高速信号中的应用。通过实际案例和计算公式,详细阐述了UI在不同数据速率下的变化、在眼图分析中的关键作用,以及如何应对高速信号设计中的抖动和码间干扰等挑战。文章还提供了PCB布线和芯片设计中的UI优化技巧,帮助工程师提升高速信号设计的实战能力。

weixin_28683391的博客 468

Java中对List进行排序

List内元素的排序。 原文地址:Java中对List进行排序作者:行者 需求:一组用户对象User放在List中,这组用户对象需要排序,先按照用户的年龄来排序,如果年龄一样的话按照id排序。  用户实体类    package test; public class User {  private int id;  //用户id  private int age; //用户年龄  pri

三木君的博客 797

YOLOv11改进策略【Neck】| PRCV 2023,SBA(Selective Boundary Aggregation):特征融合模块,描绘物体轮廓重新校准物体位置,解决边界模糊问题

SBA 模块在医疗图像分割中具有重要作用,其设计出发点是解决图像中物体边界模糊以及融合特征时的冗余和不一致问题。

Limiiiing的博客 1942

基于RK3588与昇腾310B的异构K8s集群部署与NPU统一调度实战

本文介绍了基于RK3588与昇腾310B的异构K8s集群部署方案,通过HAMi+Volcano实现NPU统一调度。方案包含硬件配置、操作系统准备(银河麒麟/欧拉)、容器运行时部署及K8s集群搭建等关键步骤,支持多厂商NPU设备的统一抽象和精细化切分,为边缘AI计算提供高效资源管理能力。

huanghm88的专栏 280

List<实体类>根据ID排序

简单快捷方便,只一行代码。

weixin_50914566的博客 218

STM32 W5500 Freemodbus Modbus TCP协议功能实现

STM32F103VCT6 W5500(SPI1),实现Modbus-TCP协议的功能

坚韧与专注 2万+

201521123006 《java程序设计》 第12周学习总结

1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容。 2. 书面作业 将Student对象(属性:int id, String name,int age,double grade)写入文件student.data、从文件读出显示。 1.字符流与文本文件:使用 PrintWriter(写),BufferedReader(读) 1.1 生成的三个学生...

173

PDF格式分析(一)简介

概述 PDF文件是一种编程形式的文档格式,它所有显示的内容,都是通过相应的操作符进行绘制的。 PDF基本显示单元包括:文字,图片,矢量图,图片 PDF扩展单元包括:水印,电子署名,注释,表单,多媒体,3D PDF动作单元:书签,超链接(初学者可以简单这么理解,对于研究比较深入的人员来说,拥有动作的单元有很多个,包括电子署名,多媒体,3D等等) 优势 一致性: 在所有可以打开PDF的机...

steve_cui的博客 2万+

相机Camera日志分析之二十六:高通相机Camx 基于预览1帧的process_capture_request重要完整日志【见注释】

文章摘要:该日志记录了一个相机预览请求的处理流程。系统从HAL层开始处理capture_request,填充预览/拍照的buffer数据,并激活相关pipeline。流程涉及多个模块(ChiNodeWrapper、IFE、IPE等)的协同工作,包括获取ImageBuffer、设置请求映射关系、处理特征美颜参数(开关状态0,级别1)等关键步骤。日志详细展示了从请求下发到各节点处理的完整链路,包含多次buffer获取、fence设置及数据传递过程,最终完成预览帧数据的处理和保存(第0帧和第1帧)。该流程体现了移

515

缓冲流、转换流、序列化流

day10【缓冲流、转换流、序列化流】 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本用法 能够使用缓冲流的特殊功能 能够阐述编码表的意义 能够使用转换流读取指定编码的文本文件 能够使用...

qq_34272315的博客 433

OData 请求里的 Nextlink 实战:在 ABAP Client Proxy 中优雅处理长列表分页

本文介绍了OData v4标准中的@odata.nextLink分页机制及其在SAP ABAP中的实践应用。重点解析了该机制通过服务端提供的完整URL实现分页获取,客户端只需循环处理直到该字段消失的特点。文章提供了清晰的ABAP代码模板,展示如何通过Remote Client Proxy实现分页数据获取,并强调了仅支持OData v4和远程消费的限制条件。通过HR员工数据聚合的实际案例,说明了流式分页处理的最佳实践,包括服务端过滤、稳定排序和内存控制等关键技术要点,为ABAP开发者提供了可直接落地的解决方案

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 268

java list id排序_java 策略模式,list集合,实现id 姓名年龄正序倒序排序(如果年龄或者姓名重复,按id正序排序)...

策略模式:1.抽象策略类,通常由一个接口或者抽象类实现。 2.具体实现类 3.环境角色类,持有一个策略类的引用,最终给客户端调用。好了,上代码:package execrise;import java.util.List;/*** 接口* @author Administrator* 2013年5月2日 18:57:16*/public interface Strange{public void ...

weixin_34657323的博客 2041

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

list倒序 java_java 策略模式,list集合,实现id 姓名年龄正序倒序排序(如果年龄或者姓名重复,按id正序排序) | 学步园...

策略模式:1.抽象策略类,通常由一个接口或者抽象类实现。 2.具体实现类 3.环境角色类,持有一个策略类的引用,最终给客户端调用。好了,上代码:package execrise;import java.util.List;/*** 接口* @author Administrator* 2013年5月2日 18:57:16*/public interface Strange{public void ...

weixin_32808905的博客 312

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java 正序a~z_java 策略模式,list集合,实现id 姓名年龄正序倒序排序(如果年龄或者姓名重复,按id正序排序)...

策略模式:1.抽象策略类,通常由一个接口或者抽象类实现。 2.具体实现类 3.环境角色类,持有一个策略类的引用,最终给客户端调用。好了,上代码:package execrise;import java.util.List;/*** 接口* @author Administrator* 2013年5月2日 18:57:16*/public interface Strange{public void ...

weixin_42503264的博客 527

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据脱敏实战:从原理到实现,构建隐私保护工具链

数据脱敏是数据安全领域的一项基础且关键的技术,其核心原理是通过对敏感信息进行变形、替换或隐藏,使其无法直接关联到特定个人,同时尽可能保留数据的业务价值。这项技术的核心价值在于实现“主动防御”,在数据产生、流转和展示的早期环节就嵌入保护,有效防范隐私泄露风险。它广泛应用于日志记录、数据展示、测试数据准备等多个场景,尤其是在开发调试、后台管理系统和对外数据交换中至关重要。例如,在类似“屏幕共享隐私保护”的场景中,脱敏技术能确保共享时不会意外暴露后台的敏感信息;而在处理“收件人电话地址”时,它能将完整信息转换为部

weixin_33924220的博客 371

java list 根据对象的字段进行排序

java list常见的几种排序方法, 里面的方法放回的是这个 方便套Comparator comparator 按照List中对象的id属性升序 list.sort(Comparator.comparing(Stu::getId)) 按照List中对象的id属性降序 list.sort(Comparator.comparing(Stu::getId).reversed()); 多条件升序 list.sort(Comparator.comparing(Stu::getId).thenComparing(

weixin_45369440的博客 3759

List根据集合内对象的ID进行排序

List根据集合内对象的某个属性进行排序

qq_36749924的博客 3326

Java Stream

stream详解

weixin_51360664的博客 1880

java list id排序_java:list排序

第一种方法:就是list中对象(bean文件)实现Comparable接口,代码如下:package com.mapred.entity;public class Bar implements Comparable{private String id;private String hexValue ;public String getId() {return id;}public void se...

weixin_42395980的博客 1123

List根据集合内对象的某个属性进行排序(选择器)

list中只有数字或者字符串时: Collections.sort(list); 加单的String类型的排序,是先排数字,再排字母,默认排序方式是升序 list中存放对象时: //按照List中对象的id属性升序 list.sort(Comparator.comparing(Stu::getId)) //按照List中对象的id属性降序 list.sort(Comparator.comparing(Stu::getId).reversed()); //多条件升序 list.sort(Comp

LongKai_G 1万+

java List 排序 Collections.sort() 对 List 排序(首先年龄排序,如果年龄相同,则按名字排序) ...

//一个POJO例子   public class User { private int age; private String name;  public User(String name,int age){  this.name=name;  this.age=age; } public int getAge() {  return age; } public void setAge(in...

世范水晶 1385

java中如何按名字来排序_如何在Java中对名称和年龄进行排序

我是Java 8的新手,我只想按名称排序。但条件是:如果名称重复,则应根据年龄对其进行排序。例如我的输入是tarun 28arun 29varun 12arun 22并且输出应该是arun 22arun 29tarun 28varun 12但是我得到类似varun 12arun 22tarun 28arun 29表示仅按年龄或名称排序。这是实现的代码:POJO类...

weixin_31156945的博客 2136

java 按照姓名排序_Java中先按照姓名排序在按照年龄排序 代码

package cn.Home;javaimport java.util.Arrays;import java.util.Comparator;ideimport org.junit.Test;thispublic class Demo03 {@Testpublic void test1() {// 默认全部系统的类Int,Integer,double ,float ,String能够排序Stud...

weixin_29219539的博客 327
上一篇: 用java实现双向循环列表
下一篇: Java反射机制及应用(一)
SOMECT
博客等级 码龄15年 11粉丝 35原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值