为包装类自定义打印方法:将HashSet输出改为{1@2@3}等格式
自定义HashSet的输出格式解决方案
当然可以实现你想要的自定义输出格式啦!你完全不用去修改Integer这类包装类的打印逻辑(而且Integer是final类,根本没法继承重写它的toString方法),我们只需要自己处理集合的输出即可。
为什么默认输出是[1, 2, 3]?
HashSet的toString()方法继承自AbstractCollection,这个方法会遍历集合中的元素,用逗号分隔,前后加上方括号,所以默认输出是[元素1, 元素2, ...]的格式。
方案一:手动拼接字符串(最直观)
通过遍历集合元素,用StringBuilder手动拼接成你想要的格式:
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class CustomSetPrint { public static void main(String[] args) { Set<Integer> mySet = new HashSet<>(); mySet.add(1); mySet.add(2); mySet.add(3); StringBuilder sb = new StringBuilder("{"); Iterator<Integer> iterator = mySet.iterator(); while (iterator.hasNext()) { sb.append(iterator.next()); // 只有后面还有元素时才加分隔符 if (iterator.hasNext()) { sb.append("@"); } } sb.append("}"); System.out.println(sb); // 输出:{1@2@3} } }
方案二:用Java 8+ Stream API(更简洁)
利用Stream的Collectors.joining()方法,可以快速实现自定义分隔符、前缀和后缀:
import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; public class CustomSetPrint { public static void main(String[] args) { Set<Integer> mySet = new HashSet<>(); mySet.add(1); mySet.add(2); mySet.add(3); String formattedStr = mySet.stream() .map(Object::toString) // 将每个元素转为字符串 .collect(Collectors.joining("@", "{", "}")); // 分隔符@,前缀{,后缀} System.out.println(formattedStr); // 输出:{1@2@3} } }
进阶:封装成工具方法(复用性更高)
如果需要多次使用这种自定义格式,可以把逻辑封装成通用工具方法:
import java.util.Set; import java.util.stream.Collectors; public class CollectionFormatUtils { public static <T> String formatSet(Set<T> set, String separator, String prefix, String suffix) { return set.stream() .map(Object::toString) .collect(Collectors.joining(separator, prefix, suffix)); } } // 调用示例 public class CustomSetPrint { public static void main(String[] args) { Set<Integer> mySet = new HashSet<>(); mySet.add(1); mySet.add(2); mySet.add(3); // 输出{1@2@3} System.out.println(CollectionFormatUtils.formatSet(mySet, "@", "{", "}")); // 还可以轻松改成其他格式,比如【1|2|3】 System.out.println(CollectionFormatUtils.formatSet(mySet, "|", "【", "】")); } }
这样你就能轻松得到任何你想要的自定义输出格式啦!
内容的提问来源于stack exchange,提问作者user9629661
相关产品推荐
相关产品推荐

