java 8 - Arrays.stream (). фильтр для фильтрации пустой строки и преобразования в массив - PullRequest
0 голосов
/ 22 мая 2018

У меня есть пример следующим образом.Я просто хочу преобразовать строку, разделенную символом «,», и преобразовать ее в длинный массив без пустой строки.productIdParams содержит [1], но когда я выполняю это, я получаю исключение.

java.lang.ArrayStoreException в java.lang.System.arraycopy (собственный метод) в java.util.stream.SpinedBuffer.copyInto (SpinedBuffer.java:194) в java.util.stream.Nodes $ SpinedNodeBuilder.copyInto (Nodes.java:1290) в java.util.stream.SpinedBuffer.asArray (SpinedBuffer.java:2).util.stream.Nodes $ SpinedNodeBuilder.asArray (Nodes.java:1296) в java.util.stream.ReferencePipeline.toArray (ReferencePipeline.java:439)

String test = "1,";
String[] productIdParams = Iterables.toArray(com.google.common.base.Splitter.on(",").omitEmptyStrings().split(test), String.class);
try {
    Long[] productIds = Arrays.stream(productIdParams).filter(productId -> !productId.isEmpty()).toArray(Long[]::new);
        System.out.println(productIds[0]);
} catch (Exception e) {
    e.printStackTrace();
}

Что-то не так??

Спасибо.

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Вы пытаетесь сделать Long[] из String[], это не разрешено.Вместо этого используйте промежуточную операцию map, чтобы привести значения String к Long объектам.

Arrays.stream(productIdParams)
      .filter(productId -> !productId.isEmpty())
      .map(Long::parseLong)
      .toArray(Long[]::new);
0 голосов
/ 22 мая 2018

Не усложняйте

String test = "1,,2,";
    String[] productIdParams = test.split(",");
    try  {
        Long[] productIds = Arrays.stream(productIdParams).filter(productId -> !productId.isEmpty()).map( Long::parseLong).toArray(Long[]::new);
        System.out.println(productIds);
    } catch (Exception e) {
        e.printStackTrace();
    }

Ваш .filter удалит пустые места из массива, а .map преобразует вашу строку в карту

0 голосов
/ 22 мая 2018

Вы забыли преобразовать String в Long:

Long[] productIds = Arrays.stream(productIdParams)
                          .filter(productId -> !productId.isEmpty())
                          .map(Long::parseLong)
                          .toArray(Long[]::new);

При вызове System.arrayCopy возникает исключение, поскольку базовые данные имеют другой тип и размер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...