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

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

具有已知界限的 Java Stream 最小值

具有已知界限的 Java Stream 最小值

紫衣仙女 2023-07-19 16:49:47
我有一個列表流,我想獲取其中元素最少的條目。我當然可以做類似的事情Stream<List<T>> s = ...s.min((e1, e2) -> e1.size() - e2.size());但在這種情況下,我們知道最小值的下界,因為大小是非負的。這意味著當找到大小為 0 的列表時,我們實際上可以停止,而不是也遍歷列表的其余部分。使用 Java Streams 可以以一種不錯的方式實現(xiàn)這一點嗎?我想象它看起來像這樣,給出一個比較器和一個函數(shù),告訴我們當前最小值何時是全局最小值:s.boundedMin(    (e1, e2) -> e1.size() - e2.size(),    e -> e.size() == 0)我想不出一種方法來實現(xiàn)這一點。當然,我可以只使用 Iterable 并使用帶有break語句的循環(huán)來實現(xiàn)這一點,我只是想知道流是否也可以讓我到達那里。編輯:為了讓它更清楚一點。該流可能包含也可能不包含大小為 0 的列表。我的問題是 min() 將遍歷整個流,即使它已經(jīng)找到大小為 0 的列表(它已經(jīng)盡可能小了)。因此,我正在尋找的是min 的實現(xiàn),它不需要通過提供最小值的下界來掃描整個流。Edit2:沒有流的等效迭代解決方案是List<List<T>> s = ...List<T> min = null;for (List<T> l : s) {        if (min == null || min.size() > l.size())            min = l;        if (min.size() == 0) {            break;        }}
查看完整描述

1 回答

?
天涯盡頭無女友

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

就是圖個好玩兒:


static <T> int size(Stream<List<T>> st) {


    class MinHolder implements Consumer<List<T>> {


        private int min = Integer.MAX_VALUE;


        public void accept(List<T> l) {

            if (min > l.size()) {

                min = l.size();

            }

        }

    }


    MinHolder holder = new MinHolder();

    Spliterator<List<T>> sp = st.spliterator();


    int elements = 0;

    for (; sp.tryAdvance(holder) && holder.min > 0; ++elements) {


    }


    System.out.printf("took %s elements to find the min%n", elements);

    return holder.min;

}

以及一些測試用例:


public static void main(String[] args) {

    Stream<List<Integer>> st = Stream.of(List.of());

    System.out.println(size(st));


    st = Stream.empty();

    System.out.println(size(st));


    st = Stream.of(List.of(), List.of(1), List.of(1, 2), List.of(1, 2, 3));

    System.out.println(size(st));

}

如果你不是被迫使用 a,Stream<List<T>>那么就不要使用;這種條件中斷并不是 Streams 的設計初衷,許多人會認為這是一種濫用。


查看完整回答
反對 回復 2023-07-19
  • 1 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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