簡體   English   中英

Java 8在對象的多維數組中找到值的第一個實例

[英]Java 8 find first instance of value in multidimensional array of objects

如果我想在對象的多維數組中查找值的第一個實例,請嘗試理解如何使用Java 8的某些功能並嘗試使用對象的多維數組。

Objects[][] someArray= .....


Arrays.stream(someArray)
                .map(someArrayFirst -> Arrays.stream(someArrayFirst))
                .map(unsure what to do here)
                .filter(a -> a.equals("some value"))
                .findFirst();

編輯,感謝您的輸入。 我現在所擁有的只是幫助別人。

 Arrays.stream(someArray)
                .flatMap(someArrayFirst -> Arrays.stream(someArrayFirst))
                .filter(MyCustomClass.class::isInstance)
                .map(MyCustomClass.class::cast)
                .filter(v -> v.value().equalsIgnoreCase("SomeString"))
                .findFirst();

您走在正確的軌道上。 您需要將這兩個維度變成一個單一的流,然后選擇滿足您條件的第一個元素:

String[][] array;
Optional<String> result = Arrays.stream(array)
    .flatMap(Arrays::stream)
    .filter("some value"::equals).findFirst();

第一個stream產生Stream<String[]> 平面映射將每個數組元素轉換為Stream<String> 然后,它只是過濾所需的值並獲取滿足條件的第一個元素。

static String[][] arr = new String[][]{{"x","y"},{"z","v"},{"b","z"}};
static String searchStr = "x";
static String searchObj = null;

public static void main(String... args) {

    Arrays.stream(arr)
    .forEach((subarr)->{
        Optional<String> opt = Arrays.stream(subarr)
                .filter((obj)->obj.equals(searchStr))
                .findFirst();
        if (opt.isPresent())
            searchObj = opt.get();
    });
    System.out.println(searchObj);
}

要么

static public String mapFlatMethod(String[][] arr, String searchStr) {
    return Arrays.stream(arr).flatMap(row -> Stream.of(row))
            .filter((obj)->obj.equals(searchStr))
            .findFirst().get();

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM