Как найти минимальный и максимальный элемент массива списка больших целых чисел? - PullRequest
0 голосов
/ 10 апреля 2019

Как мне найти минимальный и максимальный элемент для ArrayList из BigIntegers.

Что я пробовал:

import java.math.BigInteger; 
import java.io.*;
import java.util.*;

public class HelloWorld{

     public static void main(String []args){
         BigInteger i1 = new BigInteger("4343345345345");
         BigInteger i2 = new BigInteger("4343453345345345");
         BigInteger i3 = new BigInteger("4343453345");

        List<BigInteger> list = new ArrayList<>();

        list.add(i1);
        list.add(i2);
        list.add(i3);

       BigInteger max = list.stream().max(Comparator.comparing(BigInteger::intValue())).orElseThrow(NoSuchElementExcep::new);        

        BigInteger min = list.stream().min(Comparator.comparing(BigInteger::intValue())).orElseThrow(NoSuchElementExcep::new);

      System.out.println(max.intValue());
      System.out.println(min.intValue());
     }
}

Но это дает мне следующееошибки:

HelloWorld.java:20: error: ')' expected
        BigInteger min = list.stream().min(Comparator.comparing(BigInteger::intValue())).orElseThrow(NoSuchElementExcep::new);
                                                                                    ^
HelloWorld.java:20: error: ';' expected
        BigInteger min = list.stream().min(Comparator.comparing(BigInteger::intValue())).orElseThrow(NoSuchElementExcep::new);
                                                                                     ^
HelloWorld.java:20: error: illegal start of expression
        BigInteger min = list.stream().min(Comparator.comparing(BigInteger::intValue())).orElseThrow(NoSuchElementExcep::new);
                                                                                      ^
HelloWorld.java:20: error: ';' expected
        BigInteger min = list.stream().min(Comparator.comparing(BigInteger::intValue())).orElseThrow(NoSuchElementExcep::new);
                                                                                       ^
HelloWorld.java:20: error: illegal start of expression
        BigInteger min = list.stream().min(Comparator.comparing(BigInteger::intValue())).orElseThrow(NoSuchElementExcep::new);
                                                                                        ^
HelloWorld.java:20: error: ';' expected
        BigInteger min = list.stream().min(Comparator.comparing(BigInteger::intValue())).orElseThrow(NoSuchElementExcep::new);
                                                                                                    ^
HelloWorld.java:20: error: not a statement
        BigInteger min = list.stream().min(Comparator.comparing(BigInteger::intValue())).orElseThrow(NoSuchElementExcep::new);
                                                                                                     ^
HelloWorld.java:20: error: ';' expected
        BigInteger min = list.stream().min(Comparator.comparing(BigInteger::intValue())).orElseThrow(NoSuchElementExcep::new);

Есть еще идеи?

Ответы [ 4 ]

3 голосов
/ 10 апреля 2019

Получение min и max работает без сравнения intValue s.Вы должны использовать естественный порядок:

BigInteger max = list.stream().max(BigInteger::compareTo).orElseThrow(NoSuchElementExcep::new);        
BigInteger min = list.stream().min(BigInteger::compareTo).orElseThrow(NoSuchElementExcep::new);

То, что также не является способом, вы печатаете значения:

System.out.println(max.intValue());
System.out.println(min.intValue());

Вы вызываете intValue метод,но число превышает емкость int (32b).Вы должны использовать:

System.out.println(max);
System.out.println(min);
1 голос
/ 10 апреля 2019

Просто сделай

BigInteger max = list.stream().max(BigInteger::compareTo).get();
BigInteger min = list.stream().min(BigInteger::compareTo).get();
0 голосов
/ 10 апреля 2019
BigInteger max = list.stream().max(Comparator.comparing(val -> new BigInteger(String.valueOf(val))))
            .orElseThrow(NoSuchElementException::new);
BigInteger min = list.stream().min(Comparator.comparing(val -> new BigInteger(String.valueOf(val))))
            .orElseThrow(NoSuchElementException::new);

0 голосов
/ 10 апреля 2019

Ответ:

import java.io.*;
import java.util.*;


public class HelloWorld{

     public static void main(String []args){
         BigInteger i1 = new BigInteger("4343345345345");
         BigInteger i2 = new BigInteger("4343453345345345");
         BigInteger i3 = new BigInteger("22");

        List<BigInteger> list = new ArrayList<>();

        list.add(i1);
        list.add(i2);
        list.add(i3);


        System.out.println(Collections.min(list, Comparator.naturalOrder()));

     }
}
...