第一次查找列表中的值超过另一个列表中的值

时间:2017-03-23 14:38:45

标签: java java-8 java-stream

我有两个列表,我想在第二个列表开始具有比第一个列表更高的值时找到索引。 e.g:

  

名单A:[6,9,15,17,18,20]

     

名单B:[5,8,14,16,19,22]

列表B的值高于列表A中相同索引中的值的索引为4.

我尝试使用zip,然后使用findFirst,但我不知道如何获取索引而不是元素。

{{1}}

有没有一种很好的方法使用Java 8?

3 个答案:

答案 0 :(得分:2)

当然你可以使用流。 :-)回到索引的解决方案是使用IntStream.range()

     OptionalInt first = IntStream.range(0, Math.min(listA.size(), listB.size()))
            .filter(i -> listB.get(i) > listA.get(i))
            .findFirst();
     System.out.println(first);

打印:

OptionalInt[4]

在实际使用中,您可能会以某种方式使用OptionalInt,例如ifPresentorElse方法。

答案 1 :(得分:1)

我想我找到了办法:

IntStream.range(0, Min(listA.size, listB.size))
     .filter(i -> listA.get(i) < listB.get(i))
     .findFirst()
     .orElse(-1)

答案 2 :(得分:0)

您可以尝试这样的事情:

private static int getIndex(List<Integer> first, List<Integer> second) {
    int result = -1;
    for (int i = 0; i < Math.min(first.size(), second.size()); ++i) {
        if (second.get(i) > first.get(i)) {
            result = i;
            break;
        }
    }
    return result;
}