mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
@@ -29,7 +29,7 @@ public class MapComparator<K extends Object, V extends Object> implements Compar
|
||||
private boolean isDesc;
|
||||
private K orderByKey;
|
||||
|
||||
public MapComparator(K orderByKey, boolean isDesc) {
|
||||
public MapComparator(K orderByKey, boolean isDesc){
|
||||
this.orderByKey = orderByKey;
|
||||
this.isDesc = isDesc;
|
||||
}
|
||||
@@ -58,19 +58,23 @@ public class MapComparator<K extends Object, V extends Object> implements Compar
|
||||
private Object getValueByKey(Map<K, V> map, K key) {
|
||||
if (key instanceof String) {
|
||||
String keyStr = (String) key;
|
||||
|
||||
if (keyStr.matches(".+\\[[0-9]+\\]")) {
|
||||
Object value = map.get(keyStr.substring(0, keyStr.indexOf("[")));
|
||||
if (value == null) return null;
|
||||
|
||||
Integer index = StringUtils.subStringToInteger(keyStr, "[", "]");
|
||||
if (value.getClass().isArray() && Array.getLength(value) >= index) {
|
||||
return Array.get(value, index);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return map.get(key);
|
||||
}
|
||||
|
||||
public int compare_0(Map<K, V> o1, Map<K, V> o2) {
|
||||
private int compare_0(Map<K, V> o1, Map<K, V> o2) {
|
||||
Object v1 = getValueByKey(o1, orderByKey);
|
||||
Object v2 = getValueByKey(o2, orderByKey);
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ druid.common = function () {
|
||||
buildFooter : function() {
|
||||
var html = '<footer class="footer">'+
|
||||
' <div class="container">'+
|
||||
' powered by <a href="https://github.com/AlibabaTech/">AlibabaTech</a> & <a href="mailto:sandzhangtoo@gmail.com">sandzhang</a> & <a href="mailto:libinsong1204@gmail.com">melin</a>'+
|
||||
' powered by <a href="https://github.com/AlibabaTech/">AlibabaTech</a> & <a href="http://www.sandzhang.com/">sandzhang</a> & <a href="mailto:libinsong1204@gmail.com">melin</a>'+
|
||||
' </div>'+
|
||||
'</footer>';
|
||||
$(document.body).append(html);
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
/*
|
||||
* Copyright 1999-2011 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* 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 com.alibaba.druid.util;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class MapComparatorTest extends TestCase {
|
||||
|
||||
private String orderByKey = "orderby";
|
||||
|
||||
public void test_comparator_date() throws Exception {
|
||||
test_comparator_date_0(true);
|
||||
test_comparator_date_0(false);
|
||||
}
|
||||
|
||||
public void test_comparator_String() throws Exception {
|
||||
test_comparator_string_0(true);
|
||||
test_comparator_string_0(false);
|
||||
}
|
||||
|
||||
public void test_comparator_number() throws Exception {
|
||||
test_comparator_number_0(true);
|
||||
test_comparator_number_0(false);
|
||||
}
|
||||
|
||||
public void test_comparator_array() throws Exception {
|
||||
test_comparator_array_0(true);
|
||||
test_comparator_array_0(false);
|
||||
}
|
||||
|
||||
private void test_comparator_array_0(boolean desc) throws Exception {
|
||||
String orderByKey = "orderby";
|
||||
long now = System.currentTimeMillis();
|
||||
MapComparator<String, Date[]> comparator = new MapComparator<String, Date[]>(orderByKey + "[0]", desc);
|
||||
|
||||
Map<String, Date[]> map1 = new HashMap<String, Date[]>();
|
||||
Map<String, Date[]> map2 = new HashMap<String, Date[]>();
|
||||
|
||||
map1.put(orderByKey, new Date[] { new Date(now) });
|
||||
map2.put(orderByKey, new Date[] { new Date(now - 1) });
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
|
||||
|
||||
map2.put(orderByKey, new Date[] { new Date(now) });
|
||||
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
|
||||
|
||||
map2.put(orderByKey, new Date[] { new Date(now + 1) });
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
|
||||
|
||||
map2.put(orderByKey, null);
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
|
||||
|
||||
map1.put(orderByKey, null);
|
||||
map2.put(orderByKey, new Date[] { new Date(now) });
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
|
||||
|
||||
map1.put(orderByKey, null);
|
||||
map2.put(orderByKey, null);
|
||||
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
|
||||
|
||||
}
|
||||
|
||||
private void test_comparator_date_0(boolean desc) throws Exception {
|
||||
long now = System.currentTimeMillis();
|
||||
MapComparator<String, Date> comparator = new MapComparator<String, Date>(orderByKey, desc);
|
||||
|
||||
Map<String, Date> map1 = new HashMap<String, Date>();
|
||||
Map<String, Date> map2 = new HashMap<String, Date>();
|
||||
|
||||
map1.put(orderByKey, new Date(now));
|
||||
map2.put(orderByKey, new Date(now - 1));
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
|
||||
|
||||
map2.put(orderByKey, new Date(now));
|
||||
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
|
||||
|
||||
map2.put(orderByKey, new Date(now + 1));
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
|
||||
|
||||
map2.put(orderByKey, null);
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
|
||||
|
||||
map1.put(orderByKey, null);
|
||||
map2.put(orderByKey, new Date(now));
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
|
||||
|
||||
map1.put(orderByKey, null);
|
||||
map2.put(orderByKey, null);
|
||||
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
|
||||
|
||||
}
|
||||
|
||||
private void test_comparator_string_0(boolean desc) throws Exception {
|
||||
MapComparator<String, String> comparator = new MapComparator<String, String>(orderByKey, desc);
|
||||
|
||||
Map<String, String> map1 = new HashMap<String, String>();
|
||||
Map<String, String> map2 = new HashMap<String, String>();
|
||||
|
||||
map1.put(orderByKey, "opq");
|
||||
map2.put(orderByKey, "xyz");
|
||||
Assert.assertEquals(desc, comparator.compare(map1, map2) > 0);
|
||||
|
||||
map2.put(orderByKey, "opq");
|
||||
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
|
||||
|
||||
map2.put(orderByKey, "abc");
|
||||
Assert.assertEquals(desc, comparator.compare(map1, map2) < 0);
|
||||
|
||||
map2.put(orderByKey, null);
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
|
||||
|
||||
map1.put(orderByKey, null);
|
||||
map2.put(orderByKey, "opq");
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
|
||||
|
||||
map1.put(orderByKey, null);
|
||||
map2.put(orderByKey, null);
|
||||
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
|
||||
}
|
||||
|
||||
private void test_comparator_number_0(boolean desc) throws Exception {
|
||||
MapComparator<String, Double> comparator = new MapComparator<String, Double>(orderByKey, desc);
|
||||
double baseNumber = 100.123;
|
||||
|
||||
Map<String, Double> map1 = new HashMap<String, Double>();
|
||||
Map<String, Double> map2 = new HashMap<String, Double>();
|
||||
|
||||
map1.put(orderByKey, baseNumber);
|
||||
map2.put(orderByKey, baseNumber - 1);
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
|
||||
|
||||
map2.put(orderByKey, baseNumber);
|
||||
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
|
||||
|
||||
map2.put(orderByKey, baseNumber + 1);
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
|
||||
|
||||
map2.put(orderByKey, null);
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) > 0);
|
||||
|
||||
map1.put(orderByKey, null);
|
||||
map2.put(orderByKey, baseNumber);
|
||||
Assert.assertEquals(!desc, comparator.compare(map1, map2) < 0);
|
||||
|
||||
map1.put(orderByKey, null);
|
||||
map2.put(orderByKey, null);
|
||||
Assert.assertEquals(true, comparator.compare(map1, map2) == 0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user