java 8 中List<Object>屬性去重-redis序列化LocalDateTime問(wèn)題

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;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萧吠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子桐筏,更是在濱河造成了極大的恐慌纸型,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梅忌,死亡現(xiàn)場(chǎng)離奇詭異狰腌,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)牧氮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)琼腔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人踱葛,你說(shuō)我怎么就攤上這事丹莲。” “怎么了尸诽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵甥材,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我性含,道長(zhǎng)洲赵,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮叠萍,結(jié)果婚禮上芝发,老公的妹妹穿的比我還像新娘。我一直安慰自己苛谷,他們只是感情好后德,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著抄腔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪理张。 梳的紋絲不亂的頭發(fā)上赫蛇,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音雾叭,去河邊找鬼悟耘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛织狐,可吹牛的內(nèi)容都是我干的暂幼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼移迫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼旺嬉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起厨埋,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤邪媳,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后荡陷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體雨效,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年废赞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了徽龟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡唉地,死狀恐怖据悔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渣蜗,我是刑警寧澤屠尊,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站耕拷,受9級(jí)特大地震影響讼昆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一浸赫、第九天 我趴在偏房一處隱蔽的房頂上張望闰围。 院中可真熱鬧,春花似錦既峡、人聲如沸羡榴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)校仑。三九已至,卻和暖如春传惠,著一層夾襖步出監(jiān)牢的瞬間迄沫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工卦方, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留羊瘩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓盼砍,卻偏偏與公主長(zhǎng)得像尘吗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浇坐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容