Java8에서 Stream.forEach Slf4j의 Logger 메소드를 사용하면 에러가 발생한다.
해당 이유는 Slf4j의 Logger.info() 의 매개변수가 모두 String이기 때문이다.
(참고로 Commons의 Log.info()의 매개변수는 모두 Object이기 때문에 Streams.forEach안에서 사용하면 문제가 발생하지 않는다.)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class ConvertObjectTest {
private Logger logger = LoggerFactory.getLogger(ConvertObjectTest.class);@Test
public void convertObjectListWithFunctionTest() {OneMember samuel = new OneMember(1, "Samuel");
OneMember daisy = new OneMember(2, "Daisy");
OneMember matt = new OneMember(3, "Matt");List<String> persons = Stream.of(samuel, daisy, matt)
.map(OnePerson::new)
.sorted(comparing(OnePerson::getId))
.collect(toList())
.forEach(Logger::info); } }
에러가 발생하지 않게 하기 위해서는 객체를 String으로 변환시키고 peek을 실행시키는 방법을 사용한다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class ConvertObjectTest {
private Logger logger = LoggerFactory.getLogger(ConvertObjectTest.class);@Test
public void convertObjectListWithFunctionTest() {
OneMember samuel = new OneMember(1, "Samuel");
OneMember daisy = new OneMember(2, "Daisy");
OneMember matt = new OneMember(3, "Matt");
List<String> persons = Stream.of(samuel, daisy, matt)
.map(OnePerson::new)
.sorted(comparing(OnePerson::getId))
.map(OnePerson::toString)
.peek(logger::error)
.collect(toList());
}
'java core' 카테고리의 다른 글
Math.pow, 지수 비교 (Math.log, Math.getExponent) 공부 (0) | 2015.07.18 |
---|---|
Math.nextUp, Math.nextAfter, Math.ulp 공부 (0) | 2015.07.18 |
[Java8] Function과 Stream을 이용한 객체 복사 테스트 예제 (0) | 2015.07.04 |
Java의 도메인 캐시 TTL (networkaddress.cache.ttl / sun.net.inetaddr.ttl) (0) | 2015.06.07 |
[elasticsearch] 색인 매핑(index mapping)시 옵션 (0) | 2015.06.04 |