Java8集合filter過濾Integer數值為空問題解決方案
問題描述
專案使用mysql,主鍵使用int自增,實體對映為Integer,而自增主鍵勢必會大於127,那麼問題來了 ,使用java8迴圈做parentId(類似選單,多層級)判斷時候怎麼辦呢?
示例
//id 是傳遞的父id 用來過濾用 ,可以為空
List<Channel> channels = allchannel.stream()
.filter(channel -> {
if (id==null) {
return channel.getParentId()==null;
}else {
return channel.getParentId()!=null&&channel.getParentId().equals(id);
}
})
.collect(Collectors.toList());
解析
為什麼大於127就不行了呢? 因為java8內部的變數一般修飾符是final,而Integer可快取的值是-128–127(詳情查詢原始碼729行)。為了解決此種問題可以使用equal取代==判斷
附integer快取原始碼
/**
* Cache to support the object identity semantics of autoboxing for values between
* -128 and 127 (inclusive) as required by JLS.
*
* The cache is initialized on first usage. The size of the cache
* may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.
* During VM initialization, java.lang.Integer.IntegerCache.high property
* may be set and saved in the private system properties in the
* sun.misc.VM class.
*/
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[];
static {
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =
sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
}
high = h;
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
// range [-128, 127] must be interned (JLS7 5.1.7)
assert IntegerCache.high >= 127;
}
private IntegerCache() {}
}
相關文章
- java8 多條件的filter過濾JavaFilter
- OGG -FILTER 引數過濾Filter
- Stream中filter過濾條件問題記錄Filter
- filter過濾Filter
- 為什麼問題空間與解決方案空間如此重要? - Nikhil Gupta
- OGG 行過濾filter 引數Filter
- Filter過濾器Filter過濾器
- 【過濾器】web中過濾器的使用與亂碼問題解決過濾器Web
- 使用Filter介面編寫過濾器解決post亂碼Filter過濾器
- 布隆過濾器解決快取穿透問題過濾器快取穿透
- PHP 過濾器(Filter)PHP過濾器Filter
- Java Filter過濾器JavaFilter過濾器
- lucene Filter過濾器Filter過濾器
- HBase Filter 過濾器之 ValueFilter 詳解Filter過濾器
- 布隆過濾器(Bloom Filter)詳解過濾器OOMFilter
- Java 中的 Filter 過濾器詳解JavaFilter過濾器
- 解決超過會話數問題會話
- Elasticsearch——filter過濾查詢ElasticsearchFilter
- Filter過濾器的使用Filter過濾器
- JavaWeb - 【Filter】敏感詞過濾JavaWebFilter
- JavaWeb 中 Filter過濾器JavaWebFilter過濾器
- 數學建模例題2.23 過濾重複值
- 如何解決Twitter資訊流過濾問題
- 表單傳值出現亂碼問題解決方案
- js算數運算精度問題解決方案JS
- database 空值問題Database
- 快取問題(二) 布隆過濾器(Bloom Filter) 介紹和原理快取過濾器OOMFilter
- Windows XP 19技常見問題解決方案大集合(轉)Windows
- 轉:Oracle 臨時表空間過大問題解決Oracle
- Filter(過濾器)與Listener(監聽器)詳解Filter過濾器
- 過濾器解決檔案上傳下載跨域問題過濾器跨域
- 用Oracle表函式解決繫結變數集合問題Oracle函式變數
- 如何過濾掉 PHP 陣列中的空值?PHP陣列
- Redis快取穿透解決方案--布隆過濾器Redis快取穿透過濾器
- sqlserver、oracle資料庫排序空值null問題解決辦法SQLServerOracle資料庫排序Null
- 布隆過濾器(Bloom Filter)過濾器OOMFilter
- Laravel 模型過濾(Filter)設計Laravel模型Filter
- 布隆過濾器 Bloom Filter過濾器OOMFilter