話不多說,直接上。
需求:根據一定規則獲取前幾(top n)的**商(商戶,啥的都可以)。
背景:**商有等級level,評分 rank,距離維度。
實現步驟:
// 1. 根據等級分組
map> supplierlevelmap = allsupplierlist.stream().filter(e -> e.getlevel() != null) .sorted(comparator.comparing(supplierservice.supplier::getlevel)) .collect(collectors.groupingby(e -> e.getlevel(), linkedhashmap::new, collectors.tolist()));
// 2. 遍歷等級從有評分的**商中選
for (integer level : supplierlevelmap.keyset())
// 按照**商評分倒序
listsortedsupplierlist = supplierlist.stream().filter(e -> e.getrank() != null)
.sorted(comparator.comparing(supplierservice.supplier::getrank).reversed()).collect(collectors.tolist());
if (collectionutils.isempty(sortedsupplierlist))
bigdecimal prescore = new bigdecimal("0");
for (supplierservice.supplier supplier : sortedsupplierlist)
// 下乙個分數,且數已經滿足,直接返回集合
if (prescore.compareto(score) != 0 && afterfiltersupplierlist.size() >= inquirysuppliernum)
// 不判斷該**商是否超出限制
afterfiltersupplierlist.add(supplier.getsupplierid());}}
// 3.有評分的還未滿足,從沒有評分的選,距離近的優先
if (afterfiltersupplierlist.size() < inquirysuppliernum)
integer needsuppliernum = inquirysuppliernum - afterfiltersupplierlist.size();
// 按照**商距離排序
listsortedsupplieridlist = supplierlist.stream()
.filter(e -> e.getrank() == null)
.map(e -> caldistance(e, clientuserid))
.sorted(comparator.comparing(supplierservice.supplier::getdistance))
.map(supplierservice.supplier::getsupplierid)
.limit(needsuppliernum).collect(collectors.tolist());
if (collectionutils.isnotempty(sortedsupplieridlist)) }}
Stream流的使用
本文簡單記述stream的使用 第一種 最常用的,從資料庫查出資料後,需要封裝成vo類,把需要的字段返回給前端 listorderlist orderservice.list listlist orderlist.stream map order collect collectors.tolist ...
stream流的使用
list基礎物件去重處理 list newstrlist strlist.stream distinct collect collectors.tolist list物件轉map map roommap roomlist.stream collect collectors.tomap person ...
fastjson的使用心得
這個的使用很簡單,但今天下午犯二搞了很久,整理下 以免下次犯同樣的錯 1 錯誤 對json的格式想當然了 描述 json 字串拼錯了,造成怎麼解析都不對 下面是錯誤的示範 name jack psd piao city name name 就是在陣列中定義的時候錯了,乙個很2 的錯誤,今天搞的頭大 ...