我有一小段代码,它给了我[1,2,3],但是我们可以将其修改为{1@2@3}或任何其他格式吗?
public static void main(String[] args) {
Set<Integer> mySet = new HashSet<Integer>();
Integer i1=1;
Integer i2=2;
Integer i3=3;
mySet.add(i1);
mySet.add(i2);
mySet.add(i3);
System.out.println(mySet);
}
好吧,你可以使用
System.out.printf("{%s}n", mySet.stream().collect(Collectors.joining("@")));
以获得您想要的结果。
要为创建的Set
保留此格式,您可以使用它来覆盖人们正在谈论toString()
:
public static void main(String[] args) {
Set<Integer> mySet = new HashSet<Integer>() {
public String toString() {
return String.format("{%s}", stream().collect(Collectors.joining("@")));
}
}
Integer i1=1;
Integer i2=2;
Integer i3=3;
mySet.add(i1);
mySet.add(i2);
mySet.add(i3);
System.out.println(mySet);
}
。但是你可以把它解析为字符串并修改它。
例如。
public static<T> String modifier(Set<T> input, String begin, String separator, String end) {
return input.toString()
.replace("[", begin)
.replace(", ", separator)
.replace("]", end);
}
然后打电话:
System.out.println(modifier(mySet, "{", "@", "}"));
当然,您可以删除所有参数并将其设为 defuald:
public static<T> String modifier(Set<T> input) {
return input.toString()
.replace("[", "{")
.replace(", ", "@")
.replace("]", "}");
}
为Java 8
构建功能解决方案。
您可以构建一个执行toString
的stream
,然后使用 collect
将所有连接在一起。
"[" + mySet.stream().map(i -> Integer.valueOf(i)).collect(Collectors.joining(",")) + "]"
的 System.out.println(mySet);
将调用 mySet.toString()
并且将使用的实现是 AbstractCollection
中的一个,它给出了类似 [1, 6, 9, 8, 2, 3, "bar", "foo"]
如果您以不同的方式打印它,但保留HashSet
实现,您可以:
-
使用简单
StringBuilder
private static <T> String print(Set<T> set) { return "{" + set.stream().map(Object::toString).collect(Collectors.joining("@")) + "}"; }
-
使用
StringBuilder
循环访问和插入@
private static <T> String print(Set<T> set) { StringBuilder sb = new StringBuilder("{"); if (set.isEmpty()) return sb.append("}").toString(); for (T element : set) { sb.append(element.toString()).append("@"); } sb.replace(sb.lastIndexOf("@"), sb.lastIndexOf("@") + 1, ""); return sb.append("}").toString(); }
System.out.println(mySet(;方法println((基本上是使用toString((处理除某些异常之外的任何对象,因此当我们在此方法中传递对象的集合类型时,它会调用该相关集合的toString((方法,就像在您的情况下它是HashSet一样.java但是此类必须继承AbstractCollection.java的String((方法,如果我们检查该方法,它看起来像:
public String toString() {
Iterator<E> it = iterator();
if (! it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
sb.append(e == this ? "(this Collection)" : e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}
因此,您必须根据需要覆盖此方法。