Моя задача - заказать BigDecimals в виде массива String. Моя идея - использовать конструктор параметров String BigDecimal, затем отсортировать его, а затем распечатать с помощью forEach. Это часть кода:Как создать BigDecimal поток из массива String в Java 8?
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] s = new String[n + 2];
for (int i = 0; i < n; i++) {
s[i] = sc.next();
}
Stream.of(s)
.map(i -> new BigDecimal(i))
.sorted((bg1, bg2) -> bg1.compareTo(bg2))
.forEach(System.out::println); //line 22
Но я получил это NullPointerException для Foreach линии:
Exception in thread "main" java.lang.NullPointerException
at java.math.BigDecimal.<init>(BigDecimal.java:806)
at Solution.lambda$main$1(Solution.java:20)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at Solution.main(Solution.java:22)
Я с нетерпением жду, чтобы услышать от эксперта потоков.
Спасибо!
Вы заполняете массив до n-го элемента, но ваш 'String []' имеет размер 'n + 2'. Таким образом, последние два элемента имеют значение по умолчанию «null». Лучше писать 's.length' в качестве предиката в вашем for-loop. – Flown
Спасибо! Также была дана сканирующая часть. И я не знал, как отлаживать потоки, либо ... – monami