配列に要素を追加したようなやつをサックリ作る

なんかこういうコードがあって冗長だな~ と思っていたんですが

public static Optional<Path> which(String command) {
	final String pathString = System.getenv("PATH");
	final String[] pathArray = pathString.split(":");
	final List<String> pathList = Arrays.stream(pathArray).collect(Collectors.toList());
	pathList.add("/usr/local/bin/"); // Add /usr/local/bin/ to PATH
	for (String pathElement: pathList) {
		final Path path = Paths.get(pathElement, command);
		if (path.toFile().canExecute()) {
			return Optional.of(path);
		}
	}
	return Optional.empty();
}

なんか以下のように書けばいいね、ということになりました。 guava 依存だけど、わりと全面的に guava 依存してるのでまあいいか、的な。

public static Optional<Path> which(String command) {
	final String pathString = System.getenv("PATH");
	final String[] pathList = ObjectArrays.concat(pathString.split(":"), "/usr/local/bin/");
	for (String pathElement : pathList) {
		final Path path = Paths.get(pathElement, command);
		if (path.toFile().canExecute()) {
			return Optional.of(path);
		}
	}
	return Optional.empty();
}

社内でこういう Java の質問なげるとササッと返ってくるようになってきてて便利。

Published: 2015-05-07(Thu) 23:24