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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

我如何在 Java 中比較兩個(gè) JSONArray?

我如何在 Java 中比較兩個(gè) JSONArray?

繁星淼淼 2023-03-31 09:40:08
我如何比較兩個(gè) JSONArray,如果這兩個(gè)中的任何值匹配,函數(shù)必須返回true. 例如:array1=={1,2,3,4,5,6} array2=={9,10,11,1,12}當(dāng)比較這兩個(gè)數(shù)組時(shí),結(jié)果是true因?yàn)閮蓚€(gè)數(shù)組之間至少有一個(gè)共同的元素。數(shù)組中的位置并不重要。我試圖通過一種原始的方式來比較它(遍歷每個(gè)數(shù)組并比較值)。private boolean compareArrays(JSONArray deviation, JSONArray deviationIds) throws JSONException {for (int i = 0; i < deviation.length(); i++) {for (int j = 0; j < deviationIds.length(); j++)if(deviation.getString(i).equals(deviationIds.getString(j)))    return true;}return false;}這段代碼有效,但我想知道是否有辦法讓我更專業(yè)地做到這一點(diǎn)。也許,通過使用 JAVA Stream API 來實(shí)現(xiàn)。如果您需要任何其他信息,請(qǐng)發(fā)表評(píng)論。謝謝!!
查看完整描述

3 回答

?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

如果要使用 JAVA Stream API,對(duì)象必須是 Iterable。正如@Michal 提到的,您可以將其更改為 Collection。從@Michal 的回答中,我們可以簡(jiǎn)化它,就像:


public class JsonArrayIntersectTest {


    private boolean anyMatch(JSONArray first, JSONArray second) throws JSONException {

        Set<Object> firstAsSet = convertJSONArrayToSet(first);

        Set<Object> secondIdsAsSet = convertJSONArrayToSet(second);

        // use stream API anyMatch

        return firstAsSet.stream()

                .anyMatch(secondIdsAsSet::contains);

    }


    private Set<Object> convertJSONArrayToSet(JSONArray input) throws JSONException {

        Set<Object> retVal = new HashSet<>();

        for (int i = 0; i < input.length(); i++) {

            retVal.add(input.get(i));

        }

        return retVal;

    }


    @Test

    public void testCompareArrays() throws JSONException {

        JSONArray deviation = new JSONArray(ImmutableSet.of("1", "2", "3"));

        JSONArray deviationIds = new JSONArray(ImmutableSet.of("3", "4", "5"));


        Assert.assertTrue(anyMatch(deviation, deviationIds));


        deviation = new JSONArray(ImmutableSet.of("1", "2", "3"));

        deviationIds = new JSONArray(ImmutableSet.of("4", "5", "6"));


        Assert.assertFalse(anyMatch(deviation, deviationIds));


    }

}


查看完整回答
反對(duì) 回復(fù) 2023-03-31
?
慕尼黑的夜晚無繁華

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊

任何匹配返回 true 的要求都可以重新表述為非空交集 return true。將JSONArrayinto轉(zhuǎn)換Collection為很容易做到這一點(diǎn),例如像這樣


public class JsonArrayIntersectTest {


private boolean anyMatch(JSONArray first, JSONArray second) throws JSONException {

    Set<Object> firstAsSet = convertJSONArrayToSet(first);

    Set<Object> secondIdsAsSet = convertJSONArrayToSet(second);

    //Set<Object> intersection = Sets.intersection(firstAsSet, secondIdsAsSet);         // use this if you have Guava

    Set<Object> intersection = firstAsSet.stream()

            .distinct()

            .filter(secondIdsAsSet::contains)

            .collect(Collectors.toSet());

    return !intersection.isEmpty();

}


Set<Object> convertJSONArrayToSet(JSONArray input) throws JSONException {

    Set<Object> retVal = new HashSet<>();

    for (int i = 0; i < input.length(); i++) {

        retVal.add(input.get(i));

    }

    return retVal;

}


@Test

public void testCompareArrays() throws JSONException {

    JSONArray deviation = new JSONArray(ImmutableSet.of("1", "2", "3"));

    JSONArray deviationIds = new JSONArray(ImmutableSet.of("3", "4", "5"));


    Assert.assertTrue(anyMatch(deviation, deviationIds));


    deviation = new JSONArray(ImmutableSet.of("1", "2", "3"));

    deviationIds = new JSONArray(ImmutableSet.of("4", "5", "6"));


    Assert.assertFalse(anyMatch(deviation, deviationIds));


    }

}

但是,與直接使用 API 的初始版本相比,代碼要多得多JSONArray。它還會(huì)產(chǎn)生比直接 API 版本更多的迭代JSONArray,這可能是也可能不是問題。然而,總的來說,我認(rèn)為在傳輸類型上實(shí)現(xiàn)領(lǐng)域邏輯并不是一個(gè)好的做法,例如JSONArray并且總是會(huì)轉(zhuǎn)換成領(lǐng)域模型。


另請(qǐng)注意,生產(chǎn)就緒代碼還會(huì)null對(duì)參數(shù)進(jìn)行檢查。




查看完整回答
反對(duì) 回復(fù) 2023-03-31
?
明月笑刀無情

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以使用 XStream 來處理 JSON 映射

或者根據(jù)您檢索字符串的邏輯,您可以比較為

?JSONCompareResult?result?=?JSONCompare.compareJSON(json1,?json2,?JSONCompareMode.STRICT);
?System.out.println(result.toString());


查看完整回答
反對(duì) 回復(fù) 2023-03-31
  • 3 回答
  • 0 關(guān)注
  • 326 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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