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

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

如何將列表連接成一個列表

如何將列表連接成一個列表

慕標(biāo)琳琳 2022-06-15 09:36:19
我有一個值列表,其中一些可能是列表/集合或單個值。在 JavaScript 表示法中,它可能看起來像:const input = [1,2,[3,4], [5,6], 7];我想得到:const concatenated = [1,2,3,4,5,6,7];所以我有這個Java代碼:      ArrayList<T> concatenated = new ArrayList<>();      for (T v : input) {        try{          concatenated.addAll((Collection) v);        }        catch (Exception e1){          try{            concatenated.addAll((List) v);          }          catch (Exception e2){            concatenated.add(v);          }        }     }但該代碼對我來說似乎很糟糕。首先,我不知道嘗試轉(zhuǎn)換為 List 或 Collection 是否足夠 - 我應(yīng)該嘗試轉(zhuǎn)換為其他類型嗎?有什么我不應(yīng)該忽略的錯誤嗎?如何正確地做到這一點(diǎn)?
查看完整描述

3 回答

?
喵喔喔

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個贊

Exception除非列表中有null值,否則代碼不需要這樣處理。盡管在您的情況下,只需將基礎(chǔ)轉(zhuǎn)換instanceOf為:


// Edit: Since the type of the input `Collection` is not bound strictly

List<Object> flatten(Collection<?> input) {

    List<Object> concatenated = new ArrayList<>();

    for (Object v : input) {

        if (v instanceof Collection) {

            concatenated.addAll(flatten((Collection<?>) v));

        } else {

            concatenated.add(v);

        }

    }

    return concatenated;

在 jshell 上進(jìn)一步使用它會給我這個輸出:


jshell> List<Object> list = List.of(1,2,List.of(3,4),List.of(5,6),7) 

list ==> [1, 2, [3, 4], [5, 6], 7]


jshell> flatten(list)

$3 ==> [1, 2, 3, 4, 5, 6, 7]


查看完整回答
反對 回復(fù) 2022-06-15
?
守著星空守著你

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個贊

正如其他人所提到的,對控制流使用異常并不理想。您可以改為使用instanceof運(yùn)算符來測試元素是否為Collection. nullpointer的答案就是一個很好的例子。如果您想要一個更通用的選項,您還可以執(zhí)行以下操作:


import java.lang.reflect.Array;

import java.util.Arrays;

import java.util.ArrayList;

import java.util.List;

import java.util.stream.IntStream;


public static <E> List<E> deepFlatten(final Iterable<?> iterable, final Class<E> type) {

    if (type.isPrimitive() || type.isArray() || Iterable.class.isAssignableFrom(type)) {

        throw new IllegalArgumentException(

                "type must not denote a primitive, array, or java.lang.Iterable type: " + type);

    }

    final List<E> result = new ArrayList<>();

    for (final Object element : iterable) {


        if (element instanceof Iterable<?>) {

            result.addAll(deepFlatten((Iterable<?>) element, type)); // recursion


        } else if (element != null && element.getClass().isArray()) {


            if (element instanceof Object[]) {

                result.addAll(deepFlatten(Arrays.asList((Object[]) element), type)); // recursion

            } else { // primitive array

                final Iterable<?> itrArray = IntStream.range(0, Array.getLength(element))

                        .mapToObj(index -> Array.get(element, index))::iterator; // method reference

                result.addAll(deepFlatten(itrArray, type)); // recursion

            }


        } else {

            /*

             * Will throw ClassCastException if any element is not an instance

             * of "type". You could also throw a NullPointerException here if

             * you don't want to allow null elements.

             */

            result.add(type.cast(element));

        }


    }

    return result;

}

這也通過遞歸處理“嵌入式”數(shù)組以及Iterables。Map請注意,由于模棱兩可,它不處理s ;我們應(yīng)該展平鍵或值——還是兩者兼而有之?


通過以下方式調(diào)用上述內(nèi)容:


Iterable<?> iterable = List.of(

        "A", "B", "C", "D",

        List.of("E", "F", List.of("G", "H"), "I", "J"),

        "K",

        new String[]{"L", "M", "N", "O", "P"},

        new String[][]{{"Q", "R"}, {"S", "T"}, {"U"}, {"V"}},

        new Object[]{"W", "X"},

        "Y", "Z"

);

List<String> flattened = deepFlatten(iterable, String.class);

System.out.println(flattened);

給我:


[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z]

請注意,字母是按順序排列的,因?yàn)長ists 和數(shù)組有保證的迭代順序。如果您Iterable包含 a ,則每次Set的結(jié)果可能都不相同。deepFlatten


查看完整回答
反對 回復(fù) 2022-06-15
?
皈依舞

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個贊

用于Exceptions控制應(yīng)用程序流/業(yè)務(wù)邏輯是一種反模式。您可以在此處、此處此處閱讀有關(guān)它的更多信息。

關(guān)于在集合中存儲不同類型的元素可能難以調(diào)試和維護(hù)。您可以編寫自己的包裝器并從使用中封裝對它的處理。你可以參考這個以獲得靈感。


查看完整回答
反對 回復(fù) 2022-06-15
  • 3 回答
  • 0 關(guān)注
  • 130 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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