<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,具體用法可以參考之前的博文,下面是我對其源代碼的學習:
    1、運行實例:
    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)
            
    // 應該得到第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);
        }

    }


    輸出結果:
    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、代碼結構:
    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、具體實現:
    (1)抽象類MySearchTerm:
    package mysearch;

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

    (2)與、或、非關聯關系類:
    與操作:
    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)數值比較類:
    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;
        }

        
        
    /** 相當于 %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)具體業務類:
    消息類:
    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;
        }


    }


    發送日期查詢:
    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 俊星 閱讀(249) 評論(0)  編輯  收藏 所屬分類: 代碼庫

    主站蜘蛛池模板: 亚洲日韩AV无码一区二区三区人| 在线免费视频你懂的| 国产成A人亚洲精V品无码| 成人男女网18免费视频| 免费成人在线电影| 一级女性全黄久久生活片免费| 亚洲成人一级电影| 亚洲va久久久噜噜噜久久天堂| 免费h成人黄漫画嘿咻破解版| 免费无码又黄又爽又刺激| 一级毛片在线免费看| 国产在线精品观看免费观看| 国产成人亚洲精品91专区高清 | 美女扒开屁股让男人桶爽免费| 亚洲天堂福利视频| 亚洲高清在线视频| 亚洲av之男人的天堂网站| jlzzjlzz亚洲乱熟在线播放| 永久免费观看的毛片的网站| 欧美男同gv免费网站观看| 1000部羞羞禁止免费观看视频| 久久福利青草精品资源站免费| 中出五十路免费视频| 一区二区三区免费在线视频| 国产精品亚洲精品日韩电影| 亚洲女女女同性video| 亚洲xxxx18| 日韩亚洲国产综合高清| ww亚洲ww在线观看国产| 亚洲国产精品综合久久久| 亚洲精品高清国产麻豆专区| 亚洲色图视频在线观看| 久久亚洲AV无码精品色午夜麻豆| 亚洲精品在线观看视频| 亚洲国产综合精品中文第一区 | 免费A级毛片无码A∨ | 亚洲av中文无码乱人伦在线播放 | 光棍天堂免费手机观看在线观看| 国产精品无码免费专区午夜| 久久国产乱子伦精品免费午夜 | 亚洲AV无码久久精品狠狠爱浪潮|