我正在尝试按@Configuration
public class Configuration {
@Bean
public DataSource dataSource() {
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(connectURI,null);
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory);
ObjectPool objectPool = new GenericObjectPool(poolableConnectionFactory);
PoolingDataSource dataSource = new PoolingDataSource(objectPool);
return dataSource;
}
对象的NewsAdapter
属性对自定义Date
进行排序,我注意到在数据集较大的情况下,我的应用程序崩溃了Articles_Map
错误。
我不确定是否因为java.lang.IllegalArgumentException: Comparison method violates its general contract!
溢出而发生错误,或者它确实与合同的传递属性有关。特别是对于后者,我不知道如何解决它,因为据我所知,我已经处理了3种可能的结果(小于0,0,大于0)。
int
答案 0 :(得分:3)
如果Comparator
为publishedAt
,则null
违反了传递性要求。
假设您有三个Articles_Map
实例:
publishedAt
publishedAt
== null
publishedtAt
的值大于a
的值现在,如果您使用a
和b
或b
和c
来呼叫您的比较器,则比较器将为这两个呼叫返回0
。
要满足传递性规则,如果使用0
和a
调用比较器,则比较器也必须返回c
。但由于两个对象上的字段publishedAt
不是null
,如果按照说明准备,它将返回小于0
的值。
要解决此问题,如果0
和o1.publishedAt
中只有一个o2.publishedAt
,则您的比较器不得返回null
。
例如:
private static final Comparator<Articles_Map> byPublishedAtComparator =
new Comparator<Articles_Map>() {
@Override
public int compare(Articles_Map o1, Articles_Map o2) {
// needs further testing in case of nulls
if (o1.publishedAt == null) {
return (o2.publishedAt == null) ? 0 : -1;
} else if (o2.publishedAt == null) {
return 1;
}
return o1.publishedAt.compareTo(o2.publishedAt);
}
};
答案 1 :(得分:1)
考虑以下三个实例:
A1 = Articles_Map{publishedAt = 1, ...)
A2 = Articles_Map{publishedAt = null, ...)
A3 = Articles_Map{publishedAt = 2, ...)
compare(A1, A2) -> 0
compare(A2, A3) -> 0
compare(A1, A3) -> -1
违反合同......并没有意义。 (如果A1等于A2且A2等于A3,则A1应等于A3!)
解决方案是将null
视为等同于特定数值;例如如果Integer.MIN_VALUE
是published_at
,则int
。
答案 2 :(得分:0)
将此变量转换为类似的类:
private class byPublishedAtComparator implements Comparator<Articles_Map> {
@Override
public int compare(Articles_Map o1, Articles_Map o2) {
if (o1.publishedAt == null || o2.publishedAt == null) {
return 0;
}
return o1.publishedAt.compareTo(o2.publishedAt);
}
}
而是this.sort(byPublishedAtComparator);
,您必须致电
Collections.sort(yourArray, new byPublishedAtComparator());