1 redis緩存中存放的dto屬性中存在LocalDateTime類(lèi)型的 可以使用@JSONField注解姿染,標(biāo)注序列化和反序列話的類(lèi)型吼和;這樣在獲取的時(shí)候就不會(huì)報(bào)錯(cuò)等孵,直接存取不需要轉(zhuǎn)化操作date考杉;類(lèi)似如下:
@JSONField(serializeUsing = LocalDateTime.class, deserializeUsing = LocalDateTime.class)
private LocalDateTime createTime;
2 去重方式 List<Object>
方式一:
filter(distinctByKey(Users::getId))
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>(16);
/**
* 如果不存在設(shè)置true將返回null
* 如果存在 不設(shè)置 返回 當(dāng)前的value
*/
return t -> map.putIfAbsent(keyExtractor.apply(t),Boolean.TRUE) == null;
}
方式二:
collectingAndThen(toCollection(() -> new TreeSet<>(comparing(Users::getId))), ArrayList::new)
可以查看網(wǎng)上資料比較多
具體代碼
這種方式可以多屬性去重 在TreeSet<>(comparing(Users::getId+Users::getNasme))類(lèi)似這種
public void collectingAndThenUniq() {
/**
* toCollection
*
* Collection<T>
*
* 把流中所有元素收集到給定的供應(yīng)源創(chuàng)建的集合中
*
* 示例:ArrayList<Menu> menus=Menu.getMenus.stream().collect(Collectors.toCollection(ArrayList::new))
*
* collectingAndThen
*
* 轉(zhuǎn)換函數(shù)返回的類(lèi)型
*
* 包裹另一個(gè)轉(zhuǎn)換器,對(duì)其結(jié)果應(yīng)用轉(zhuǎn)換函數(shù)
*
* 示例:Int count=Menu.getMenus.stream().collect(collectingAndThen(toList(),List::size))
*
*
* // TreeSet中的元素影兽,如果是實(shí)體揭斧,必須得傳比較器(或者實(shí)體類(lèi)需要實(shí)現(xiàn)Comparable中的compareTo方法),不然就會(huì)報(bào)錯(cuò)
* // TreeSet是Set的子類(lèi)赢笨,里面的元素有序且不能重復(fù)未蝌,可以去重
*
* Collectors.toCollection方法:將結(jié)果收集到其它類(lèi)型的集合中(這里是TreeSet)
*Collectors.collectingAndThen(
* Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(userOrder -> userOrder.getPhotographerName() + userOrder.getDeviceCode()))),
* ArrayList::new
* )
* 測(cè)試Collectors.collectingAndThen方法:將流中的數(shù)據(jù)通過(guò)Collector計(jì)算,計(jì)算的結(jié)果再通過(guò)Function處理一下
* (這里是將TreeSet轉(zhuǎn)為ArrayList茧妒。即相當(dāng)于將最終結(jié)果又經(jīng)過(guò)了new ArrayList<>(treeSet))
*/
ArrayList<Users> collect = addModel().stream().collect(
collectingAndThen(toCollection(() -> new TreeSet<>(comparing(Users::getId))), ArrayList::new));
System.out.println("===========" + JSON.toJSONString(collect));
}
public void distictUniq() {
List<Users> collect = addModel().stream().filter(distinctByKey(Users::getId)).collect(Collectors.toList());
System.out.println("======" + JSON.toJSONString(collect));
}
亂入的排序方法
public void sort() {
List<Users> collect = addModel().stream().sorted(
comparing(Users::getCreateTime).thenComparing(Users::getId).reversed()).collect(Collectors.toList());
List<Long> collect1 = addModel().stream().sorted(
comparing(Users::getCreateTime).thenComparing(Users::getId).reversed()).map(Users::getId).collect(
Collectors.toList());
System.out.println("========sort" + JSON.toJSONString(collect) + " ==== ===" + JSON.toJSONString(collect1));
}
這種方式復(fù)用性強(qiáng)
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>(16);
/**
* 如果不存在設(shè)置true將返回null
* 如果存在 不設(shè)置 返回 當(dāng)前的value
*/
return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}