Java 8在多维对象数组中找到第一个值实例

时间:2017-05-04 01:25:36

标签: java arrays java-8 java-stream

如果我想在多维对象数组中找到值的第一个实例,试图理解如何使用一些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();

2 个答案:

答案 0 :(得分:4)

你走在正确的轨道上。您需要将两个维度转换为单个流,然后获取满足条件的第一个元素:

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

第一个stream生成Stream<String[]>。平面地图将每个数组元素转换为Stream<String>。然后它只是过滤你想要的值并获得满足你条件的第一个元素。

答案 1 :(得分:1)

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();

}