ファイルのPATH Windows でも Linux でも、階層に分けた同じ結果リストを求める。
どういう課題かというと、、、
c:\a\b\c
/a/b/c
とある時、
a a/b a/b/c
というリストを改行出力した結果を得たい。
Windows 環境の PATH であろうが、Linux環境であろうが、同じ結果が欲しい。
ちょうど、Stream の collect 集計の練習になる。
String path に、格納されているとして、以下のようになる。
List<String> list = Stream.of(path.split(File.separator.equals("\\") ? "\\\\" : "/")) .filter(s->s.length() > 0 && !s.matches("^[a-zA-Z]:$")) .collect(()->new ArrayList<String>(), (r, s)->{ if (r.size() < 1){ r.add(s); }else{ r.add(r.get(r.size()-1) + "/" + s); } }, (r, t)->r.addAll(t));
もっと短く書けるはずで、、
List<String> list = Stream.of(path.split(File.separator.equals("\\") ? "\\\\" : "/")) .filter(s->s.length() > 0 && !s.matches("^[a-zA-Z]:$")) .collect(()->new ArrayList<String>() , (r, s)->r.add((r.size() < 1 ? "" : r.get(r.size()-1) + "/") + s) , (r, t)->r.addAll(t));
これで、
list.stream().forEach(e->{
System.out.println(e);
});
a a/b a/b/c