第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java Lambda流Distinct()在任意鍵上?

Java Lambda流Distinct()在任意鍵上?

慕運維8079593 2019-10-28 10:00:31
我經(jīng)常遇到Java lambda表達式的問題,當我想對對象的任意屬性或方法上的stream()進行區(qū)分()時,我想保留該對象而不是將其映射到該屬性或方法上。我開始按照這里的討論來創(chuàng)建容器,但是我開始做得足夠好,以至于變得煩人并創(chuàng)建了許多樣板課程。我將這個Pairing類放在一起,該類包含兩種類型的兩個對象,并允許您指定左,右或兩個對象的鍵控。我的問題是……在某種類型的關(guān)鍵供應(yīng)商上,實際上沒有內(nèi)置的lambda流函數(shù)可對distinct()嗎?那真的會讓我感到驚訝。如果不是,此類將可靠地實現(xiàn)該功能嗎?這就是它的稱呼BigDecimal totalShare = orders.stream().map(c -> Pairing.keyLeft(c.getCompany().getId(), c.getShare())).distinct().map(Pairing::getRightItem).reduce(BigDecimal.ZERO, (x,y) -> x.add(y));這是配對課程    public final class Pairing<X,Y>  {           private final X item1;           private final Y item2;           private final KeySetup keySetup;           private static enum KeySetup {LEFT,RIGHT,BOTH};           private Pairing(X item1, Y item2, KeySetup keySetup) {                  this.item1 = item1;                  this.item2 = item2;                  this.keySetup = keySetup;           }           public X getLeftItem() {                   return item1;           }           public Y getRightItem() {                   return item2;           }           public static <X,Y> Pairing<X,Y> keyLeft(X item1, Y item2) {                   return new Pairing<X,Y>(item1, item2, KeySetup.LEFT);           }           public static <X,Y> Pairing<X,Y> keyRight(X item1, Y item2) {                   return new Pairing<X,Y>(item1, item2, KeySetup.RIGHT);           }           public static <X,Y> Pairing<X,Y> keyBoth(X item1, Y item2) {                   return new Pairing<X,Y>(item1, item2, KeySetup.BOTH);           }           public static <X,Y> Pairing<X,Y> forItems(X item1, Y item2) {                   return keyBoth(item1, item2);           }           }    }
查看完整描述

3 回答

?
海綿寶寶撒

TA貢獻1809條經(jīng)驗 獲得超8個贊

在下面測試了Stuart的功能,它看起來很棒。下面的操作在每個字符串的第一個字母上有所區(qū)別。我要弄清楚的唯一部分是ConcurrentHashMap如何僅維護整個流的一個實例


public class DistinctByKey {


    public static <T> Predicate<T> distinctByKey(Function<? super T,Object> keyExtractor) {

        Map<Object,Boolean> seen = new ConcurrentHashMap<>();

        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;

    }


    public static void main(String[] args) { 


        final ImmutableList<String> arpts = ImmutableList.of("ABQ","ALB","CHI","CUN","PHX","PUJ","BWI");


        arpts.stream().filter(distinctByKey(f -> f.substring(0,1))).forEach(s -> System.out.println(s));

    }

輸出是...


ABQ

CHI

PHX

BWI


查看完整回答
反對 回復 2019-10-28
?
四季花海

TA貢獻1811條經(jīng)驗 獲得超5個贊

您或多或少必須要做類似的事情


 elements.stream()

    .collect(Collectors.toMap(

        obj -> extractKey(obj), 

        obj -> obj, 

       (first, second) -> first

           // pick the first if multiple values have the same key

       )).values().stream();


查看完整回答
反對 回復 2019-10-28
  • 3 回答
  • 0 關(guān)注
  • 1161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號