ACM-JAVA获取数组中的最大(最小)值

本文最后更新于:December 8, 2021 pm

积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。

目录

今天遇到一道简单题,是有关山峰数组(山脉数组)的。题目链接

也不知道怎么滴。然后搜了一下java中是否有直接获取数组中最大最小值的这种方法,所以这篇博客就主要针对java中怎样获取数组中的最大最下值进行一下简单的总结整理。

1.排序

不说了,心累。

2.通过Array.stream方式

Arrays.stream(arr).min().getAsInt()和Arrays.stream(arr).max().getAsInt()。分别是用来获取数组arr中的最小值和最大值。

stream是JDK8新增的核心功能之一,使用它可以很方便的实现很多功能,如查找最大最小值等。

示例:

1
2
3
4
5
6
7
8
9
public static void main(String[] args) throws Exception {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
int[] arr= {23,43,324,22223,432,234,2312};
out.println(Arrays.stream(arr).max().getAsInt()); //只用于int,不能用于Integer
out.println(Arrays.stream(arr).min().getAsInt());
out.println(Arrays.stream(arr).sum());
out.flush();
}

3.通过Collections类

Collections.min()和Collections.max()方法。分别用来获取数组中的最小值和最大值。

示例:

1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) throws Exception {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
Integer[] arr= {23,43,324,22223,432,234,2312};
int min = (int) Collections.min(Arrays.asList(arr)); //只能用于Integer,不能用于int。如果要用于int,则需要进行转换。如示例2。
int max = (int) Collections.max(Arrays.asList(arr));
out.println(min);
out.println(max);
out.flush();
}

说明:

Collections.max();参数需要的是一个集合。

Arrays.asList();是将数组变成集合,返回的也是一个可变的集合。

示例2:

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) throws Exception {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
int[] arr= {23,43,324,22223,432,234,2312};
Integer[] integerArray = Arrays.stream(arr).boxed().collect(Collectors.toList()).toArray(new Integer[0]);
int min = (int) Collections.min(Arrays.asList(integerArray));
int max = (int) Collections.max(Arrays.asList(integerArray));
out.println(min);
out.println(max);
out.flush();
}

说明:

boxed()的作用就是将int类型的stream转成了Integer类型的Stream。

Collectors.toList()是java8中的。

collect是一个终端操作,它接收的参数是将流中的元素累积到汇总结果的各种方式(称为收集器)。

预定义收集器包括将流元素归约和汇总到一个值,如下:

工厂方法 返回类型 用于
toList List 把流中所有元素收集到List中
示例:List menus=Menu.getMenus.stream().collect(Collectors.toList())
toSet Set 把流中所有元素收集到Set中,删除重复项
示例:Set menus=Menu.getMenus.stream().collect(Collectors.toSet())
toCollection Collection 把流中所有元素收集到给定的供应源创建的集合中
示例:ArrayList menus=Menu.getMenus.stream().collect(Collectors.toCollection(ArrayList::new))
Counting Long 计算流中元素个数
示例:Long count=Menu.getMenus.stream().collect(counting);
SummingInt Integer 对流中元素的一个整数属性求和
示例:Integer count=Menu.getMenus.stream().collect(summingInt(Menu::getCalories))
averagingInt Double 计算流中元素integer属性的平均值
示例:Double averaging=Menu.getMenus.stream().collect(averagingInt(Menu::getCalories))
Joining String 连接流中每个元素的toString方法生成的字符串
示例:String name=Menu.getMenus.stream().map(Menu::getName).collect(joining(“, ”))
maxBy Optional 一个包裹了流中按照给定比较器选出的最大元素的optional 如果为空返回的是Optional.empty()
示例:Optional fattest=Menu.getMenus.stream().collect(maxBy(Menu::getCalories))
minBy Optional 一个包裹了流中按照给定比较器选出的最大元素的optional 如果为空返回的是Optional.empty()
示例: Optional lessest=Menu.getMenus.stream().collect(minBy(Menu::getCalories))
Reducing 归约操作产生的类型 从一个作为累加器的初始值开始,利用binaryOperator与流中的元素逐个结合,从而将流归约为单个值
示例:int count=Menu.getMenus.stream().collect(reducing(0,Menu::getCalories,Integer::sum));
collectingAndThen 转换函数返回的类型 包裹另一个转换器,对其结果应用转换函数
示例:Int count=Menu.getMenus.stream().collect(collectingAndThen(toList(),List::size))
groupingBy Map<K,List> 根据流中元素的某个值对流中的元素进行分组,并将属性值做为结果map的键
示例:Map<Type,List> menuType=Menu.getMenus.stream().collect(groupingby(Menu::getType))
partitioningBy Map<Boolean,List> 根据流中每个元素应用谓语的结果来对项目进行分区
示例:Map<Boolean,List> menuType=Menu.getMenus.stream().collect(partitioningBy(Menu::isType));

本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/1926660320.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!