有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java发现列表中的值第一次超过另一个列表中的值

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

List A: [6, 9, 15, 17, 18, 20]

List B: [5, 8, 14, 16, 19, 22]

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

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

 Streams.zip(listA, listB, Pair::of)
.findFirst(pair-> pair.getFirst() < pair.getSecond());

使用Java8有没有一种很好的方法


共 (3) 个答案

  1. # 1 楼答案

    我想我找到了一个方法:

    IntStream.range(0, Min(listA.size, listB.size))
         .filter(i -> listA.get(i) < listB.get(i))
         .findFirst()
         .orElse(-1)
    
  2. # 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方法

  3. # 3 楼答案

    您可以尝试以下方法:

    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;
    }