Java를 사용하여 기본 배열에서 최대 / 최소 값 찾기 */ private static int maxValue(char[]

배열에서 최소 / 최대 값을 결정하는 함수를 작성하는 것은 간단합니다.

/**
 * 
 * @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;
}


답변

IntStreammax()방법으로 쉽게 할 수 있습니다 .

public static int maxValue(final int[] intArray) {
  return IntStream.range(0, intArray.length).map(i -> intArray[i]).max().getAsInt();
}

설명

  1. range(0, intArray.length)-에있는 요소 수만큼 스트림을 가져옵니다 intArray.

  2. map(i -> intArray[i])-스트림의 모든 요소를의 실제 요소에 매핑합니다 intArray.

  3. max()-이 스트림의 최대 요소를로 가져옵니다 OptionalInt.

  4. getAsInt()-포장을 풉니 다 OptionalInt. (당신은 또한 여기에 사용할 수 있습니다 orElse(0), 의인 경우 OptionalInt비어 있습니다.)