私は、コードの副作用のない性質と、並行コードでのそのユーティリティのために、より機能的なプログラミングを私がしていることに取り入れようとしてきました。私は、Javaストリームの連続した要素を除外する必要性に遭遇し、平易な古い命令的アプローチよりも優れた機能的アプローチを思いつくことができませんでした。引数を記録するプログラムがあり、2つの連続した要素を除外したいとします。たとえば、-o anOption, -k aSecretKeyWhoseValueWeShouldNotLog, -a anotherOption
となります。ログに欲しいものは-o anOption, -a anotherOption
です。Javaストリーム内の連続した要素をスキップする方法は?
私はいくつかのアプローチを考え出しましたが、フィルタリングする必要があったものを索引付けしたforループを使用するのと同じくらい理解できませんでした。
これは、やりたいことはかなり一般的なようです。このようなことによく使われる、Javaストリームやその他のものを使ってパターンがありますか?
ありがとう、
これは私が最後にしたものです。
static String filterSecretKeyOutOfCommandLineLogString(final String[] args) {
return joinArgsToString(filterOptionAndValueOutOfCommandLineLogString(SECRET_KEY, args));
}
private static String joinArgsToString(final String[] args) {
return Joiner.on(ARG_JOINER_DELIMITER).join(args);
}
private static String[] filterOptionAndValueOutOfCommandLineLogString(final Option option, final String[] args) {
final List<String> filteredList = new ArrayList<>();
final int numArgs = args.length;
for (int i = 0; i < numArgs; ++i) {
if (Arguments.matchesOption(option, args[i])) {
++i;
} else {
filteredList.add(args[i]);
}
}
return filteredList.toArray(new String[0]);
}
あなたの説明をよりよく説明するために、あなたの必須のアプローチを提供してください。 –
「連続する要素をスキップする」とはどういう意味ですか? – 4castle
あなたは私たちに、あなたが思い付いた命令的なアプローチを見せてもらえますか?これは、ストリームベースのアプローチの出発点として使用することができます(そして、ストリームベースのアプローチでは、実際に勝利を得ることができます)。 – Makoto