Ⅰ java comparator定義規則
一、實體類Step
package com.ljq.entity;
/**
* 運號單流程
*
* @author Administrator
*
*/
public class Step{
/** 處理時間 */
private String acceptTime = "";
/** 快件所在地點 */
private String acceptAddress = "";
public Step() {
super();
}
public Step(String acceptTime, String acceptAddress) {
super();
this.acceptTime = acceptTime;
this.acceptAddress = acceptAddress;
}
public String getAcceptTime() {
return acceptTime;
}
public void setAcceptTime(String acceptTime) {
this.acceptTime = acceptTime;
}
public String getAcceptAddress() {
return acceptAddress;
}
public void setAcceptAddress(String acceptAddress) {
this.acceptAddress = acceptAddress;
}
}
二、實現Comparator介面
package com.ljq.entity;
import java.util.Comparator;
import java.util.Date;
import com.ljq.util.UtilTool;
/**
* 對Step類進行排序
*
* @author Administrator
*
*/
public class StepComparator implements Comparator<Step>{
/**
* 如果o1小於o2,返回一個負數;如果o1大於o2,返回一個正數;如果他們相等,則返回0;
*/
@Override
public int compare(Step o1, Step o2) {
Date acceptTime1=UtilTool.strToDate(o1.getAcceptTime(), null);
Date acceptTime2=UtilTool.strToDate(o2.getAcceptTime(), null);
//對日期欄位進行升序,如果欲降序可採用before方法
if(acceptTime1.after(acceptTime2)) return 1;
return -1;
}
}
三、測試
package junit;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
public class StepComparatorTest {
@Test
public void sort() throws Exception{
List<Step> steps=new ArrayList<Step>;
//對集合對象進行排序
StepComparator comparator=new StepComparator();
Collections.sort(steps, comparator);
if(steps!=null&&steps.size()>0){
for(Step step:steps){
System.out.println(step.getAcceptAddress());
System.out.println(step.getAcceptTime());
}
}
}
}
Ⅱ java里comparator怎麼給字元串排序
是排序字元抄串裡面的字元嗎,先轉成數組,
char[]
toCharArray()
Converts this string to a new character array.
再使用 java.util.Arrays 的sort方法
static <T> void sort(T[] a,
Comparator<? super T> c)
Sorts the specified array of objects according to the order inced by
the specified comparator.
Ⅲ java Comparator中的返回值和排序有什麼關系啊,求解釋!!!!!
負數代表左值小於右值,排在上面
正數代表左值大於右值,排在下面
0代表回左值等於右值,答排在上面
可以這樣理解:排序就是比較誰大誰小,將小的放在前面,大的放在後面。例如當返回負數的時候,表明第一個數應該排在第二個數的上面。
Ⅳ java中的Comparator
看你數組里存的是什麼類型的數據咯,如果是基礎類型或者java中已經有的對版象類型,就可以直接比較大權小,一般java中的對象類型都已經實現了比較大小的方法。如果是保存自定義的類型,則需要自定義的類型實現Comprable或者Comparator這兩個介面。這兩者的差別可以參考下面的網頁。
Ⅳ java中comparator 介面怎麼比較字元串
理論基礎:
字元串已經實現了Comparable介面,所以在Comparator介面的實現類中只要調用String的compareTo(String str)方法版就可以了。
具體權策略:
返回值等於0說明相等,比較的是Unicode順序,注意如果輸入都是數字與數字比較結果可能不同因為"111"就是排在"2"之前
Ⅵ java中Comparator問題
實現了 Comparator介面(即「比較器」介面,新集合庫的一部分)的一個對象,並用它的單個專
compare()方法進屬行比較。這個方法將兩個准備比較的對象作為自己的參數使用——若第一個參數小於第二
個,返回一個負整數;若相等,返回零;若第一個參數大於第二個,則返回正整數。
Ⅶ java comparator 默認是升序么
comparator 不是介面嗎,可以implement之後重寫它的compare(T o1, T o2)方法實現降序啊(compare方法返回的是一個int型的數值,從小於0,等於0到等於0依次表示的是o1小於o2,o1等於o2,o1大於o2,所以可以反寫邏輯實現降序的,以下是一個按年齡降序列印的例子)
packagehahalan.lianxi;
importjava.util.Arrays;
publicclassPeople{
Stringname;
intage;
publicPeople(Stringname,intage){
this.name=name;
this.age=age;
}
publicStringgetName(){
returnname;
}
publicintgetAge(){
returnage;
}
publicstaticvoidmain(String[]args){
People[]peoples=newPeople[]{newPeople("張三",18),
newPeople("李四",20),newPeople("王五",19)};
System.out.print("排序前:");
for(Peoplepeople:peoples){
System.out.print(people.getName()+":"+people.getAge()+"");
}
System.out.print(" 排序後:");
Arrays.sort(peoples,newPeopleComparator());
for(Peoplepeople:peoples){
System.out.print(people.getName()+":"+people.getAge()+"");
}
}
}packagehahalan.lianxi;
importjava.util.Comparator;
<People>{
@Override
publicintcompare(Peopleo1,Peopleo2){
returno2.getAge()-o1.getAge();
}
}
列印結果為:
排序前:張三:18 李四:20 王五:19
排序後:李四:20 王五:19 張三:18
Ⅷ 關於java使用Comparator多列數據升序、降序排列的問題。哪位大俠能解決
list中放的是對象吧。
重寫一下compare方法就行啊。
一個多if判斷的問題,
升序代碼
如果版(產品好權相等){
升序代碼
如果(會員號相等){
升序代碼
如果(客戶號相等){
降序代碼
如果(順序號相等){
}
}
}
}
升序和降序其實就是a>b是return 1還是return -1 的事。
如果需要代碼就接著追問。
Ⅸ Java中Comparator介面的用法
在java編程中,如果要對集合對象或數組對象進行排序,需要實現Comparator介面以達到目標,用法如下(模擬下在集合對象中對日期屬性進行排序):
一、實體類Step
packagecom.ljq.entity;
/**
*運號單流程
*
*@authorAdministrator
*
*/
publicclassStep{
/**處理時間*/
privateStringacceptTime="";
/**快件所在地點*/
privateStringacceptAddress="";
publicStep(){
super();
}
publicStep(StringacceptTime,StringacceptAddress){
super();
this.acceptTime=acceptTime;
this.acceptAddress=acceptAddress;
}
publicStringgetAcceptTime(){
returnacceptTime;
}
publicvoidsetAcceptTime(StringacceptTime){
this.acceptTime=acceptTime;
}
publicStringgetAcceptAddress(){
returnacceptAddress;
}
publicvoidsetAcceptAddress(StringacceptAddress){
this.acceptAddress=acceptAddress;
}
}
二、實現Comparator介面
packagecom.ljq.entity;
importjava.util.Comparator;
importjava.util.Date;
importcom.ljq.util.UtilTool;
/**
*對Step類進行排序
*
*@authorAdministrator
*
*/
<Step>{
/**
*如果o1小於o2,返回一個負數;如果o1大於o2,返回一個正數;如果他們相等,則返回0;
*/
@Override
publicintcompare(Stepo1,Stepo2){
DateacceptTime1=UtilTool.strToDate(o1.getAcceptTime(),null);
DateacceptTime2=UtilTool.strToDate(o2.getAcceptTime(),null);
//對日期欄位進行升序,如果欲降序可採用before方法
if(acceptTime1.after(acceptTime2))return1;
return-1;
}
}
三、代碼測試
packagejunit;
importjava.util.Collection;
importjava.util.Collections;
importjava.util.List;
importorg.junit.Test;
publicclassStepComparatorTest{
@Test
publicvoidsort()throwsException{
List<Step>steps=newArrayList<Step>;
//對集合對象進行排序
StepComparatorcomparator=newStepComparator();
Collections.sort(steps,comparator);
if(steps!=null&&steps.size()>0){
for(Stepstep:steps){
System.out.println(step.getAcceptAddress());
System.out.println(step.getAcceptTime());
}
}
}
}