배열에서 최소 / 최대 값을 결정하는 함수를 작성하는 것은 간단합니다.
/**
*
* @param chars
* @return the max value in the array of chars
*/
private static int maxValue(char[] chars) {
int max = chars[0];
for (int ktr = 0; ktr < chars.length; ktr++) {
if (chars[ktr] > max) {
max = chars[ktr];
}
}
return max;
}
그러나 이것은 이미 어딘가에서 이루어지지 않았습니까?
답변
Commons Lang 사용 (변환) + 콜렉션 (최소 / 최대)
import java.util.Arrays;
import java.util.Collections;
import org.apache.commons.lang.ArrayUtils;
public class MinMaxValue {
public static void main(String[] args) {
char[] a = {'3', '5', '1', '4', '2'};
List b = Arrays.asList(ArrayUtils.toObject(a));
System.out.println(Collections.min(b));
System.out.println(Collections.max(b));
}
}
Arrays.asList()
기본 배열 을 래핑하므로 메모리를 너무 많이 사용해서는 안되며 배열 요소에 대해 복사를 수행해서는 안됩니다.
답변
당신은 단순히 새로운 자바 8 사용할 수 있습니다 Stream
들 하지만 당신과 함께 일해야한다 int
.
stream
유틸리티 클래스의 방법은 Arrays
당신에게주는 IntStream
당신이 사용할 수에 min
방법을. 당신도 할 수있는 max
, sum
, average
, …
이 getAsInt
방법은OptionalInt
import java.util.Arrays;
public class Test {
public static void main(String[] args){
int[] tab = {12, 1, 21, 8};
int min = Arrays.stream(tab).min().getAsInt();
int max = Arrays.stream(tab).max().getAsInt();
System.out.println("Min = " + min);
System.out.println("Max = " + max)
}
}
== 업데이트 ==
실행 시간이 중요하고 한 번만 데이터를 통과하려는 경우 다음 summaryStatistics()
과 같은 방법을 사용할 수 있습니다
import java.util.Arrays;
import java.util.IntSummaryStatistics;
public class SOTest {
public static void main(String[] args){
int[] tab = {12, 1, 21, 8};
IntSummaryStatistics stat = Arrays.stream(tab).summaryStatistics();
int min = stat.getMin();
int max = stat.getMax();
System.out.println("Min = " + min);
System.out.println("Max = " + max);
}
}
이 방법은 summaryStatistics
방법이 축소 연산 이고 병렬화 가 가능 하기 때문에 기존 루프보다 성능이 향상 될 수 있습니다.
답변
구글 구아바 라이브러리 는 등 숯을, INTS, 걷고, 클래스의 최소 및 최대 방법이있다.
따라서 다음을 간단히 사용할 수 있습니다.
Chars.min(myarray)
변환이 필요하지 않으며 아마도 효율적으로 구현됩니다.
답변
예, Collections 클래스 에서 수행됩니다 . 프리미티브 char 배열을 Character []로 수동으로 변환해야합니다.
간단한 데모 :
import java.util.*;
public class Main {
public static Character[] convert(char[] chars) {
Character[] copy = new Character[chars.length];
for(int i = 0; i < copy.length; i++) {
copy[i] = Character.valueOf(chars[i]);
}
return copy;
}
public static void main(String[] args) {
char[] a = {'3', '5', '1', '4', '2'};
Character[] b = convert(a);
System.out.println(Collections.max(Arrays.asList(b)));
}
}
답변
import java.util.Arrays;
public class apples {
public static void main(String[] args) {
int a[] = {2,5,3,7,8};
Arrays.sort(a);
int min =a[0];
System.out.println(min);
int max= a[a.length-1];
System.out.println(max);
}
}
답변
다음과 같은 방법으로 모든 응용 프로그램에 작은 도우미 클래스가 있습니다.
public static double arrayMax(double[] arr) {
double max = Double.NEGATIVE_INFINITY;
for(double cur: arr)
max = Math.max(max, cur);
return max;
}
답변
IntStream
과 max()
방법으로 쉽게 할 수 있습니다 .
예
public static int maxValue(final int[] intArray) {
return IntStream.range(0, intArray.length).map(i -> intArray[i]).max().getAsInt();
}
설명
-
range(0, intArray.length)
-에있는 요소 수만큼 스트림을 가져옵니다intArray
. -
map(i -> intArray[i])
-스트림의 모든 요소를의 실제 요소에 매핑합니다intArray
. -
max()
-이 스트림의 최대 요소를로 가져옵니다OptionalInt
. -
getAsInt()
-포장을 풉니 다OptionalInt
. (당신은 또한 여기에 사용할 수 있습니다orElse(0)
, 의인 경우OptionalInt
비어 있습니다.)