[java] Java 컬렉션을 훌륭하게 인쇄 (toString이 출력을 제대로 반환하지 않음)

나는 인쇄 할 Stack<Integer>로 잘 이클립스 디버거가하는 (즉, 같은 개체 [1,2,3...])하지만, 그것을 인쇄하기 out = "output:" + stack이 좋은 결과를 반환하지 않습니다.

명확히하기 위해 Java의 내장 컬렉션에 대해 이야기하고 있으므로이를 재정의 할 수 없습니다 toString().

인쇄 가능한 멋진 버전의 스택을 얻으려면 어떻게해야합니까?



답변

배열로 변환 한 다음 다음을 사용하여 인쇄 할 수 있습니다 Arrays.toString(Object[]).

System.out.println(Arrays.toString(stack.toArray()));


답변

String.join(",", yourIterable);

(자바 8)


답변

Java 8 스트림 및 콜렉터를 사용하면 쉽게 수행 할 수 있습니다.

String format(Collection<?> c) {
  String s = c.stream().map(Object::toString).collect(Collectors.joining(","));
  return String.format("[%s]", s);
}

먼저 mapwith Object::toStringCollection<String>사용하여 결합 컬렉터를 사용하여 콜렉션의 모든 항목 ,을 분리 문자 로 결합합니다 .


답변

Apache Commons 프로젝트에서 제공하는 MapUtils 클래스는 MapUtils.debugPrint맵을 인쇄 하는 방법을 제공합니다 .


답변

System.out.println (Collection c)은 이미 모든 유형의 컬렉션을 읽을 수있는 형식으로 인쇄합니다. collection에 사용자 정의 오브젝트가 포함 된 경우에만 컨텐츠를 표시하려면 사용자 정의 클래스에서 toString ()을 구현해야합니다.


답변

클래스에서 toString ()을 구현하십시오.

이것을 쉽게하기 위해 Apache Commons ToStringBuilder 를 권장합니다 . 그것으로, 당신은 이런 종류의 방법을 작성해야합니다 :

public String toString() {
     return new ToStringBuilder(this).
       append("name", name).
       append("age", age).
       toString();
}

이런 종류의 출력을 얻으려면 :

Person @ 7f54 [이름 = Stephen, 나이 = 29]

또한 반사 구현이 있습니다.


답변

구아바는 좋은 옵션처럼 보입니다.

Iterables.toString(myIterable)