Stream делает что-то другое с первым и последним элементом, Java 8 - PullRequest
0 голосов
/ 13 января 2019

У меня есть этот код, можно сделать, используя типично

private static final String FS = System.getProperty("file.separator");
JFileChooser folderChooser = new JFileChooser();
if (folderChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
      String filename = folderChooser.getSelectedFile().getPath();
      String[] recursivePaths = filename.split(FS);
      TreePath treePath = null;
      for (String part : recursivePaths) {
        int row = (treePath == null ? 0 : treePaths.getRowForPath(treePath));
        treePath = treePaths.getNextMatch(part, row, Position.Bias.Forward);
        if (treePath == null) {

        }
      }
}

Но я хочу знать, возможно ли использовать Java 8 Stream, дополнительно

private static final String FS = System.getProperty("file.separator");
JFileChooser folderChooser = new JFileChooser();
if (folderChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
      String filename = folderChooser.getSelectedFile().getPath();
      String[] recursivePaths = filename.split(FS);
      Stream.of(recursivePaths).forEach(partFile -> {
          // Do something with FIRST, But How Discover?
          // Do something with OTHERS
          // Do something with LAST, But How Discover?
      });
}

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Вероятно, лучше обращаться с первым и последним отдельно

private static final String FS = System.getProperty("file.separator");
JFileChooser folderChooser = new JFileChooser();
if (folderChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
    String filename = folderChooser.getSelectedFile().getPath();
    String[] recursivePaths = filename.split(FS);
    String first = recursivePaths[0];
    String last = recursivePaths[recursivePaths.length - 1];

    Arrays.stream(recursivePaths, 1, recursivePaths.length - 1).forEach( x -> {
       //stream the elements in the middle
    });
  });
}

Вероятно, стоит добавить некоторую проверку длины для recursivePaths

0 голосов
/ 13 января 2019

Вы можете нарезать свою последовательность, пройдя через List, затем используя subList.

Я не совсем уверен, что вы пытаетесь сделать, но вы можете найти Stream.reduce полезным. Вы, вероятно, знаете, что неэффективные финалы извне нельзя использовать в лямбде.

IMO, потоки обычно затрудняют понимание кода, хотя они очень умные.

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