在列表列表中找到最小大小的列表

zak*_*zak 6 java java-stream

我有一个列表列表,我想使用java Stream返回具有最小大小的列表.

这是我试过的:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Example {
   public static void main( String[] args )  {
         ArrayList<Integer> list1 = new ArrayList<>();
         list1.add(0);list1.add(2);list1.add(3);

         ArrayList<Integer> list2 = new ArrayList<>();
         list2.add(0);list2.add(2);list2.add(3);list2.add(4);

         System.out.println( getTheMinList(list1,list2).size());    
   }

   public static ArrayList<Integer> getTheMinList(ArrayList<Integer>... lists) {
         return Arrays.stream(lists)
                      .map(list->list.size())
                      /*here i stoped*/
                ;
   }
}
Run Code Online (Sandbox Code Playgroud)

程序应该打印,3因为第一个列表具有最小大小.

请注意,我无法更改getTheMinList()的签名.有人可以给我一个提示吗?

Nam*_*man 6

您可以使用Stream.min比较List.size

public static List<Integer> getTheMinList(List<Integer>... lists){
    return Arrays.stream(lists)
            .min(Comparator.comparingInt(List::size))
            .orElse(new ArrayList<>());
}
Run Code Online (Sandbox Code Playgroud)

或者如果你可以摆脱 var-args 和未经检查的分配可能会更好

private static List<Integer> getTheMinList(List<List<Integer>> lists){
    return lists.stream()
            .min(Comparator.comparingInt(List::size))
            .orElse(new ArrayList<>());
}
// invoked as
System.out.println(getTheMinList(List.of(list1, list2)).size());
Run Code Online (Sandbox Code Playgroud)