私たちのプロジェクトでは、Java 8に移行し、その新機能をテストしています。
私のプロジェクトでは、Guava述語と関数を使用してCollections2.transform
、およびを使用して一部のコレクションをフィルター処理および変換していCollections2.filter
ます。
この移行では、たとえばguavaコードをjava 8に変更する必要があります。つまり、私が行っている変更は次のようなものです。
List<Integer> naturals = Lists.newArrayList(1,2,3,4,5,6,7,8,9,10,11,12,13);
Function <Integer, Integer> duplicate = new Function<Integer, Integer>(){
@Override
public Integer apply(Integer n)
{
return n * 2;
}
};
Collection result = Collections2.transform(naturals, duplicate);
に...
List<Integer> result2 = naturals.stream()
.map(n -> n * 2)
.collect(Collectors.toList());
グアバを使用して、各変換プロセスをデバッグできたので、コードのデバッグは非常に快適でしたが、たとえば、デバッグ方法が心配です.map(n -> n*2)
。
デバッガーを使用すると、次のようなコードが表示されます。
@Hidden
@DontInline
/** Interpretively invoke this form on the given arguments. */
Object interpretWithArguments(Object... argumentValues) throws Throwable {
if (TRACE_INTERPRETER)
return interpretWithArgumentsTracing(argumentValues);
checkInvocationCounter();
assert(arityCheck(argumentValues));
Object[] values = Arrays.copyOf(argumentValues, names.length);
for (int i = argumentValues.length; i < values.length; i++) {
values[i] = interpretName(names[i], values);
}
return (result < 0) ? null : values[result];
}
しかし、コードをデバッグするのはGuavaほど簡単ではありませんn * 2
。実際、変換を見つけることができませんでした。
この変換を確認する方法またはこのコードを簡単にデバッグする方法はありますか?
編集:私はさまざまなコメントと投稿された回答から回答を追加しました
Holger
私の質問に答えたコメントのおかげで、ラムダブロックを使用するアプローチにより、変換プロセスを確認し、ラムダ本体内で何が起こったかをデバッグすることができました。
.map(
n -> {
Integer nr = n * 2;
return nr;
}
)
Stuart Marks
メソッド参照を持つというアプローチのおかげで、変換プロセスをデバッグすることもできました。
static int timesTwo(int n) {
Integer result = n * 2;
return result;
}
...
List<Integer> result2 = naturals.stream()
.map(Java8Test::timesTwo)
.collect(Collectors.toList());
...
Marlon Bernardes
回答のおかげで、私のEclipseには何が必要かが表示されず、peek()の使用が結果の表示に役立ちました。
result
変数をとして宣言する必要はありませんInteger
。シンプルでint
、あなたがしている場合にも行う必要がありmap
ピングint
にint
...