<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    俊星的BLOG

    JAVA MAIL之我的搜索

    JAVAMAIL中提供搜索郵件的API,具體用法可以參考之前的博文,下面是我對(duì)其源代碼的學(xué)習(xí):
    1、運(yùn)行實(shí)例:
    package mysearch;

    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;

    public class Main {
        
    public static void main(String[] args) {
            List
    <Msg> list = new ArrayList<Msg>();
            
    long time = System.currentTimeMillis();
            list.add(
    new Msg(new Date(time), 1"subject1"));
            list.add(
    new Msg(new Date(time - 1000), 2"subject2"));
            list.add(
    new Msg(new Date(time - 60 * 1000), 3"subject3"));
            list.add(
    new Msg(new Date(time - 2 * 60 * 1000), 1"subject14"));
            
            
    // 查詢條件:!((subject like ject1 and senddate < time)or size>2)
            
    // 應(yīng)該得到第1、4條記錄
            MySearchTerm subTerm = new MySubjectTerm("ject1");
            MySearchTerm dateTerm 
    = new MySendDateTerm(MyCompTerm.LT,new Date(time));
            MySearchTerm sizeTerm 
    = new MySizeTerm(MyCompTerm.GT,2);
            
            MySearchTerm term 
    = new MyAndTerm(subTerm,dateTerm);
            term 
    = new MyOrTerm(term,sizeTerm);
            term 
    = new MyNotTerm(term);
            
    int count = 0;
            
    for (Msg m : list) {
                
    if (term.match(m)) {
                    count
    ++;
                    System.out.println(m);
                }

            }

            System.out.println(
    "count:" + count);
        }

    }


    輸出結(jié)果:
    sendDate:Fri Apr 24 21:58:12 CST 2009 size:1 subject:subject1
    sendDate:Fri Apr 
    24 21:58:11 CST 2009 size:2 subject:subject2
    count:
    2

    2、代碼結(jié)構(gòu):
    file://F:\dev\eclipse\workspace\hibertest\src\mysearch
    Main.java
    Msg.java
    MyAndTerm.java
    MyCompTerm.java
    MyDateTerm.java
    MyIntTerm.java
    MyNotTerm.java
    MyOrTerm.java
    MySearchTerm.java
    MySendDateTerm.java
    MySizeTerm.java
    MyStrTerm.java
    MySubjectTerm.java

    3、具體實(shí)現(xiàn):
    (1)抽象類MySearchTerm:
    package mysearch;

    public abstract class MySearchTerm {
        
    public abstract boolean match(Msg msg);
    }

    (2)與、或、非關(guān)聯(lián)關(guān)系類:
    與操作:
    package mysearch;

    /**
     * 與操作
     * 
    @author kinkding
     
    */

    public class MyAndTerm extends MySearchTerm {
        
    protected MySearchTerm terms[];

        
    public MyAndTerm(MySearchTerm t1, MySearchTerm t2) {
            terms 
    = new MySearchTerm[2];
            terms[
    0= t1;
            terms[
    1= t2;
        }


        
    public MyAndTerm(MySearchTerm t[]) {
            terms 
    = new MyAndTerm[t.length];
            
    for (int i = 0; i < t.length; i++{
                terms[i] 
    = t[i];
            }

        }


        @Override
        
    public boolean match(Msg msg) {
            
    for (MySearchTerm term : terms) {
                
    if (!term.match(msg)) {
                    
    return false;
                }

            }

            
    return true;
        }


    }


    或操作:
    package mysearch;
    /**
     * 或操作
     * 
    @author kinkding
     
    */

    public class MyOrTerm extends MySearchTerm {
        
    protected MySearchTerm terms[];

        
    public MyOrTerm(MySearchTerm t1, MySearchTerm t2) {
            terms 
    = new MySearchTerm[2];
            terms[
    0= t1;
            terms[
    1= t2;
        }


        
    public MyOrTerm(MySearchTerm t[]) {
            terms 
    = new MySearchTerm[t.length];
            
    for (int i = 0; i < t.length; i++{
                terms[i] 
    = t[i];
            }

        }


        @Override
        
    public boolean match(Msg msg) {
            
    for (MySearchTerm term : terms) {
                
    if (term.match(msg)) {
                    
    return true;
                }

            }

            
    return false;
        }

    }


    非操作:
    package mysearch;

    /**
     * 非操作
     * 
    @author kinkding
     
    */

    public class MyNotTerm extends MySearchTerm {
        
    protected MySearchTerm term;

        
    public MyNotTerm(MySearchTerm t) {
            term 
    = t;
        }


        @Override
        
    public boolean match(Msg msg) {
            
    return !term.match(msg);
        }

    }


    (3)數(shù)值比較類:
    package mysearch;

    public abstract class MyCompTerm extends MySearchTerm{
        
    public static final int LE = 1;// <=
        public static final int LT = 2;// <
        public static final int EQ = 3;// ==
        public static final int NE = 4;// !=
        public static final int GT = 5;// >
        public static final int GE = 6;// >=
        protected int comparison;
    }


    (3)字符、日期、整型比較類:
    字符比較:
    package mysearch;

    public abstract class MyStrTerm extends MySearchTerm {
        
    protected String str;

        
    public MyStrTerm(String s) {
            str 
    = s;
        }

        
        
    /** 相當(dāng)于 %str%=s*/
        
    protected boolean match(String s) {
            
    for(int i=0,len = s.length()-str.length();i<=len;i++){
                
    if(s.regionMatches(i, str, 0, str.length())){
                    
    return true;
                }

            }

            
    return false;
        }


    }


    日期比較:
    package mysearch;

    import java.util.Date;

    public abstract class MyDateTerm extends MyCompTerm {
        
    protected Date date;

        
    public MyDateTerm(int comp, Date d) {
            
    this.comparison = comp;
            
    this.date = d;
        }


        
    /** d comp date */
        
    protected boolean match(Date d) {
            
    long td = d.getTime();
            
    long tt = date.getTime();
            
    switch (comparison) {
            
    case LT:
                
    return td < tt;
            
    case LE:
                
    return td <= tt;
            
    case EQ:
                
    return td == tt;
            
    case NE:
                
    return td != tt;
            
    case GT:
                
    return td > tt;
            
    case GE:
                
    return td >= tt;
            
    default:
                
    return false;
            }

        }


    }


    整型比較:
    package mysearch;


    public abstract class MyIntTerm extends MyCompTerm {
        
    protected int value;

        
    public MyIntTerm(int comp, int i) {
            
    this.comparison = comp;
            
    this.value = i;
        }


        
    /** i comp value */
        
    protected boolean match(int i) {
            
    switch (comparison) {
            
    case LT:
                
    return i < value;
            
    case LE:
                
    return i <= value;
            
    case EQ:
                
    return i == value;
            
    case NE:
                
    return i != value;
            
    case GT:
                
    return i > value;
            
    case GE:
                
    return i >= value;
            
    default:
                
    return false;
            }

        }

    }


    (4)具體業(yè)務(wù)類:
    消息類:
    package mysearch;

    import java.util.Date;

    public class Msg {
        
    private Date sendDate;
        
    private String subject;
        
    private int size;

        
    public Date getSendDate() {
            
    return sendDate;
        }


        
    public String getSubject() {
            
    return subject;
        }


        
    public int getSize() {
            
    return size;
        }


        
    public Msg(Date sendDate, int size, String subject) {
            
    super();
            
    this.sendDate = sendDate;
            
    this.size = size;
            
    this.subject = subject;
        }


        
    public String toString() {
            
    return "sendDate:" + sendDate + " size:" + size + " subject:" + subject;
        }


    }


    發(fā)送日期查詢:
    package mysearch;

    import java.util.Date;

    public class MySendDateTerm extends MyDateTerm {

        
    public MySendDateTerm(int comp, Date d) {
            
    super(comp, d);
        }


        @Override
        
    public boolean match(Msg msg) {
            
    return msg == null ? false : super.match(msg.getSendDate());
        }


    }


    大小查詢:
    package mysearch;

    public class MySizeTerm extends MyIntTerm {
        
    public MySizeTerm(int comp, int i) {
            
    super(comp, i);
        }


        @Override
        
    public boolean match(Msg msg) {
            
    return msg==null?false:super.match(msg.getSize());
        }


    }


    主題查詢:
    package mysearch;

    public class MySubjectTerm extends MyStrTerm {
        
    public MySubjectTerm(String s) {
            
    super(s);
        }


        @Override
        
    public boolean match(Msg msg) {
            
    return msg == null ? false : super.match(msg.getSubject());
        }


    }


    4、代碼下載地址mysearchrar

    posted on 2009-04-24 22:09 俊星 閱讀(245) 評(píng)論(0)  編輯  收藏 所屬分類: 代碼庫(kù)

    主站蜘蛛池模板: 亚洲色大成网站WWW国产| 亚洲动漫精品无码av天堂| 亚洲国产成人久久| 国产午夜不卡AV免费| 国内精品久久久久久久亚洲| 色一情一乱一伦一视频免费看| 免费视频中文字幕| 亚洲av成人片在线观看| 拔擦拔擦8x华人免费久久| 国产成人精品久久亚洲高清不卡 | 久久综合亚洲鲁鲁五月天| 国产精品免费看久久久 | 91精品国产免费久久久久久青草| 亚洲性天天干天天摸| 91久久青青草原线免费| 亚洲国产精品一区二区久| 国产h视频在线观看免费| 亚洲日本乱码卡2卡3卡新区| 成人无遮挡毛片免费看| 免费国产高清毛不卡片基地 | 亚洲国产精品无码中文lv| 又大又粗又爽a级毛片免费看| 一级A毛片免费观看久久精品| 亚洲天堂免费在线视频| 日韩免费无码视频一区二区三区| 亚洲视频小说图片| 成人免费视频国产| 色www永久免费| 99热亚洲色精品国产88| 夜色阁亚洲一区二区三区| 少妇太爽了在线观看免费视频| 亚洲一级毛片免费在线观看| 亚洲av中文无码| 久久国产色AV免费看| 久久久亚洲精华液精华液精华液| 日韩精品成人亚洲专区| 久久国产乱子伦免费精品| 国产亚洲综合一区二区三区| 亚洲第一极品精品无码久久| 在线观看无码的免费网站| 成人妇女免费播放久久久|