Java集合:如何分开打印ArrayList中的Integer与String对象
如何将混合Integer和String的ArrayList分组打印
这问题其实挺常见的,尤其是不小心创建了无泛型约束的ArrayList时。我给你两种实用的解决思路,都能轻松实现分组打印的需求:
方法一:传统遍历判断类型
最直观的方式就是遍历原集合,用instanceof关键字判断每个元素的类型,然后分别存入对应的新集合,最后打印输出。代码示例如下:
import java.util.ArrayList; import java.util.List; public class GroupElements { public static void main(String[] args) { // 假设这是你的混合类型集合 List mixedList = new ArrayList(); mixedList.add(10); mixedList.add("Hello"); mixedList.add(20); mixedList.add("World"); mixedList.add(30); // 分别创建存储Integer和String的集合 List<Integer> integerList = new ArrayList<>(); List<String> stringList = new ArrayList<>(); // 遍历分组 for (Object element : mixedList) { if (element instanceof Integer) { integerList.add((Integer) element); } else if (element instanceof String) { stringList.add((String) element); } // 如果还有其他类型,可以继续加else if判断 } // 打印结果 System.out.println("Integer类型元素:"); integerList.forEach(System.out::println); System.out.println("\nString类型元素:"); stringList.forEach(System.out::println); } }
方法二:使用Stream API(Java 8+)
如果你的项目用的是Java 8及以上版本,用Stream API可以写出更简洁的代码,一行就能完成分组:
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class GroupWithStream { public static void main(String[] args) { List mixedList = new ArrayList(); mixedList.add(10); mixedList.add("Hello"); mixedList.add(20); mixedList.add("World"); mixedList.add(30); // 按类型分组,key是Class对象,value是对应类型的元素列表 Map<Class<?>, List<Object>> groupedMap = mixedList.stream() .collect(Collectors.groupingBy(Object::getClass)); // 打印Integer组 System.out.println("Integer类型元素:"); groupedMap.get(Integer.class).forEach(System.out::println); // 打印String组 System.out.println("\nString类型元素:"); groupedMap.get(String.class).forEach(System.out::println); } }
额外提醒
虽然上面的方法能解决问题,但强烈建议尽量避免创建这种混合类型的集合。Java的泛型就是用来保证类型安全的,混合类型很容易导致ClassCastException等运行时异常,代码可读性和维护性也会变差。如果确实需要存储不同类型的元素,最好考虑自定义一个统一的父类或者使用泛型通配符来规范集合类型。
内容的提问来源于stack exchange,提问作者Akshma Mittal
相关产品推荐
相关产品推荐

