一种通用的类方法“print”,用于在对象集合中打印元素

时间:2016-04-09 10:22:45

标签: java generics printing

public static <T> void print(Collection<T> l)

如果我有一个包含a,b和c的集合,我希望输出为

[a,b,c]

如果它是空的我希望它是

[]

我的代码现在。

public class CollectionOps {
public static <E, T extends Iterable<E>> void print(T a){
    //for(Iterable type Iterable element : collection)
    for (E x : a) {
        System.out.print(x);

    }

}
public static void main(String[] args){
    ArrayList<String> a = new ArrayList<String>();
    a.add("a");
    a.add("b");
    a.add("c");
    print(a);
}

}

输出:abc

也许我可以以某种方式使用System.out.printf()?

2 个答案:

答案 0 :(得分:2)

集合类通常会覆盖toString以准确生成该输出。因此,如果你有一个Collection,你可以做到

System.out.println(collection);

这可行,因为println会调用toString

如果您想在该表单中打印Iterable,我只会将其设为一个集合。

List<Object> list = new ArrayList<>();
for (Object o : iterable)
    list.add(o);
System.out.println(list);

另请注意,您可以使用通配符来改进方法签名。

public static void print(Iterable<?> iterable)

答案 1 :(得分:0)

大多数Java集合(List,Set,Queue等)都完全按照您的意愿实现toString方法。那么为什么不直接使用呢?

public static void main(String[] args) {
    print(Arrays.asList('a','b','c'));
    print(new ArrayList());
    print(new HashSet<>(Arrays.asList("a","b","c")));
    print(new HashSet());
    print(new PriorityQueue<>(Arrays.asList(1,2,3)));
    print(new PriorityQueue<>());
}

public static <T> void print(Collection<T> l){
    System.out.println(l);
}

输出:

[a, b, c]
[]
[a, b, c]
[]
[1, 2, 3]
[]