繁体   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