⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listexpressioncomparator.java

📁 JoSQL 1.5的源代码。JoSQL(SQL for Java Objects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java
💻 JAVA
字号:
/* * Copyright 2004-2005 Gary Bentley  *  * Licensed under the Apache License, Version 2.0 (the "License"); you may  * not use this file except in compliance with the License.  * You may obtain a copy of the License at  *    http://www.apache.org/licenses/LICENSE-2.0  * * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License. */package org.josql.internal;import java.util.List;import java.util.ArrayList;import java.util.Comparator;import java.util.Map;import java.util.HashMap;import org.josql.expressions.Expression;import org.josql.Query;public class ListExpressionComparator implements Comparator{    private List items = new ArrayList ();    private Query q = null;    private int size = 0;    private int count = 0;    private Exception exp = null;    private Object nullObj = new Object ();    private Map cache = new HashMap ();    private boolean caching = false;    public ListExpressionComparator (Query   q,				     boolean caching)    {	this.q = q;	this.caching = caching;    }    public int getCount ()    {	return this.count;    }    public boolean equals (Object o)    {	throw new UnsupportedOperationException ("Not supported for instances of: " +						 this.getClass ().getName ());    }     public boolean isCaching ()    {	return this.caching;    }    public void setCaching (boolean b)    {	this.caching = b;    }    public void clearCache ()    {	this.cache.clear ();    }    public int ci (Object o1,		   Object o2)	           throws Exception    {	for (int i = 0; i < this.size; i++)	{	    Item it = (Item) this.items.get (i);	    this.q.setCurrentObject (o1);	    Object eo1 = it.exp.getValue (o1,					  this.q);	    this.q.setCurrentObject (o2);	    	    Object eo2 = it.exp.getValue (o2,					  this.q);	    // Compare them...	    int c = Utilities.compare (eo1,				       eo2);	    if (c == 0)	    {		// Go to the next...		continue;	    }	    // For speed reasons, 1 is used here rather than the constant.	    if (it.dir == 1)	    {		c = -1 * c;	    }	    return c;	}	return 0;    }    public int cic (Object o1,		    Object o2)	            throws Exception    {	this.count++;	Map co = null;	boolean get = true;	Item it = null;	Object eo1 = null;	Object eo2 = null;	for (int i = 0; i < this.size; i++)	{	    it = (Item) this.items.get (i);	    eo1 = null;	    get = true;	    co = (Map) cache.get (o1);	    if (co == null)	    {		co = new HashMap (this.size);		cache.put (o1,			   co);		get = false;	    } 	    if (get)	    {		eo1 = co.get (it);		if (eo1 == this.nullObj)		{		    eo1 = null;		}	    }			    if (eo1 == null)	    {		this.q.setCurrentObject (o1);		eo1 = it.exp.getValue (o1,				       this.q);		co.put (it,			eo1);	    }	    get = true;	    eo2 = null;	    co = (Map) cache.get (o2);	    if (co == null)	    {		co = new HashMap (this.size);		cache.put (o2,			   co);		get = false;	    }	    if (get)	    {		eo2 = co.get (it);	    }	    if (eo2 == null)	    {		this.q.setCurrentObject (o2);		eo2 = it.exp.getValue (o2,				       this.q);				co.put (it,			eo2);	    }	    	    // Compare them...	    int c = Utilities.compare (eo1,				       eo2);	    if (c == 0)	    {		// Go to the next...		continue;	    }	    // For speed reasons, 1 is used here rather than the constant.	    if (it.dir == 1)	    {		c = -1 * c;	    }	    return c;	}	return 0;    }    public int compare (Object o1,			Object o2)    {	try	{	    if (this.caching)	    {		return this.cic (o1,				 o2);	    } else {		return this.ci (o1,				o2);	    }	} catch (Exception e) {	    this.exp = e;	    return 0;	}    }    public Exception getException ()    {	return this.exp;    }    public List getSortItems ()    {	return this.items;    }    public void addSortItem (Expression exp,			     int        dir)    {	Item it = new Item ();	it.dir = dir;	it.exp = exp;	this.items.add (it);	this.size = this.items.size ();    }    private class Item    {	public int dir = 0;	public Expression exp = null;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -