1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java 正序a~z_java 策略模式 list集合 实现id 姓名年龄正序倒序排序(如果年龄

java 正序a~z_java 策略模式 list集合 实现id 姓名年龄正序倒序排序(如果年龄

时间:2023-08-11 18:50:55

相关推荐

java 正序a~z_java 策略模式 list集合 实现id 姓名年龄正序倒序排序(如果年龄

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

好了,上代码:

package execrise;

import java.util.List;

/**

* 接口

* @author Administrator

* 5月2日 18:57:16

*/

public interface Strange

{

public void sort(Listlist,int i);

}

package execrise;

import java.util.Collections;

import parator;

import java.util.List;

/**

* 具体实现类

* @author Administrator

* 5月2日 18:56:23

*/

public class FindByID implements Strange

{

public int k;

@Override

public void sort(Listlist, 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{

@Override

public int compare(Person o1, Person o2)

{

/*

* 我当时纳闷,我没有调用compare()方法,我们知道Collections.reverseOrder()括号里是一个指定的比较器,

* 可是我怎么确定我的compare()方法起作用,被调用呢???于是有了如下打印语句。证明确实调用了自己重写的方法。

* 那谁调用呢???? 一定是reverseOrder()这个方法。于是跟踪源码。如下: public static * ComparatorreverseOrder(Comparatorcmp) { if (cmp == null)

* return reverseOrder(); return new ReverseComparator2(cmp); } * 继续跟踪 ---> ReverseComparator2....源码如下:

*

* private static class ReverseComparator2implements

* Comparator,Serializable { private static final long

* serialVersionUID = 4374092139857L; private Comparatorcmp;

*

* ReverseComparator2(Comparatorcmp) { assert cmp != null;

* this.cmp = cmp; }

*

* public int compare(T t1, T t2) { return pare(t2, t1); } } *

* 知道ReverseComparator2是个内部类,注意这句话 return pare(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 parator;

import java.util.List;

/**

*

* @author Administrator 5月2日 18:57:55

*/

public class FindByName implements Strange

{

int k;

@Override

public void sort(Listlist, 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{

@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 parator;

import java.util.List;

/**

* @author Administrator

* 5月2日 18:58:27

*/

public class FindByAge implements Strange

{

int k;

@Override

public void sort(Listlist, 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{

@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;

/**

* 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(Listlist, int i)

{

strange.sort(list, i);

}

}

package execrise;

import java.util.ArrayList;

/**

* 5月2日 19:01:02

* @author Administrator

* 客户端

*/

public class Client

{

public static void main(String[] args)

{

ArrayListlist = new ArrayList();

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 正序a~z_java 策略模式 list集合 实现id 姓名年龄正序倒序排序(如果年龄或者姓名重复 按id正序排序)...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。