프로젝트에서 우리는 Java 8로 마이그레이션하고 있으며 새로운 기능을 테스트하고 있습니다.
내 프로젝트에서 Guava 술어와 함수를 사용하여 Collections2.transform및을 사용하여 일부 컬렉션을 필터링하고 변환 하고 Collections2.filter있습니다.
이 마이그레이션에서 예를 들어 구아바 코드를 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...