使用java stream获取arrayList中min size列表的索引

zak*_*zak 3 java collections java-stream

我有一个整数列表列表,如list1 =(1,2,3)和list2 =(0,1).

我的列表列表包含list1和list2.它可以包含更多但是对于示例我只采用了两个列表.

问题是使用java流获取最小大小的列表索引.

这是我的程序,它只使用for循环方法.

import java.util.ArrayList;

public class Example {

     public static void main( String[] args ) {


         ArrayList<Integer> list1 = new ArrayList<>();
         list1.add(1);list1.add(2);list1.add(3);

         ArrayList<Integer> list2 = new ArrayList<>();
         list2.add(0);list2.add(1);

         ArrayList<ArrayList<Integer>> listOLists = new ArrayList<>();
         listOLists.add(list1);
         listOLists.add(list2);
         printTheIndexOfTheListWithTheMinSize(listOLists);
     }

    private static void printTheIndexOfTheListWithTheMinSize( ArrayList<ArrayList<Integer>> listOLists ) {
        int minSize  = listOLists.get(0).size();
        int minIndex = 0;
        int i=0;
        for ( ArrayList<Integer> list:  listOLists ) {

            if (list.size()<minSize)
            {
                minSize = list.size();
                minIndex=i;
            }
            i++;

        }
        System.out.println(minIndex);
    }
}
Run Code Online (Sandbox Code Playgroud)

能否请您使用Java流API向我提示如何做到这一点.

请注意,我在重度计算中多次调用此方法,因此awnser应该考虑到这一点.

JB *_*zet 5

不是很优雅,因为它需要拳击和拆箱,但......

Optional<Integer> minIndex = 
    IntStream.range(0, list.size())
             .boxed()
             .min(Comparator.comparingInt(i -> list.get(i).size()));
Run Code Online (Sandbox Code Playgroud)

  • 或者,没有装箱`IntStream.range(0,list.size()).reduce((a,b) - > list.get(a).size()<= list.get(b).size()? a:b)` (3认同)
  • 这个拳击开销远远低于其他答案的`indexOf`操作...... (2认同)