我有一个列表列表,我想使用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()的签名.有人可以给我一个提示吗?
您可以使用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)
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |