List i=new ArrayList();
i.add("abc");
i.add("def");
i.add(61);
i.add(9);
i.add(50);
i.add("ghi");
i.add("ikh");
i.add("oihik");
i.add("oig");
i.add(243);
i.add(5);
i.add(54);
for (Iterator iterator = new Test123((i.iterator())); iterator.hasNext();) {
Object object = (Object) iterator.next();
System.out.println(object);
期望输出:
字符串输入:abc def ghi ikh oihik oig
整数输入:61 9 50 243 5 54
如果列表是分组的,我想过滤整数输出怎么办?
预期输出将是:
字符串输入:abc def ghi ikh oihik oig
整数输入:61 9 50 243 5 54
小于60的整数为:9 50 5 54
如果您只想将字符串和整数元素分开并打印出来,您可以这样做:
List i=new ArrayList();
i.add("abc");
i.add("def");
i.add(61);
i.add(9);
i.add(50);
i.add("ghi");
i.add("ikh");
i.add("oihik");
i.add("oig");
i.add(243);
i.add(5);
i.add(54);
StringBuilder strBuilder = new StringBuilder( "String input:");
StringBuilder intBuilder = new StringBuilder( "Integer input:");
for( Object o : i)
{
if( o instanceof String)
{
strBuilder.append( " ");
strBuilder.append( o);
}
else if( o instanceof Integer)
{
intBuilder.append( " ");
intBuilder.append( o);
}
}
System.out.println( strBuilder.toString());
System.out.println( intBuilder.toString());
您可以使用instanceof Class
测试列表中的每个项目。
-
instanceof String
返回true,如果你的列表项是String
-
instanceof Double
返回true,如果你的列表项是Double
-
instanceof Number
返回true,如果你的列表项目是Integer
,Double
等中的任何一个。
这是一个非常简单和直接的方法使用Stream
和lambda expression
。最后,使用replaceAll()
方法在List的String表示中提取所需的String
。
List<String> listString = (List<String>) i.stream()
.filter(t -> t instanceof String).collect(Collectors.toList());
List<Number> listNumber = (List<Number>) i.stream()
.filter(t -> t instanceof Number).collect(Collectors.toList());
String str = listString.toString().replaceAll(",", "").replaceAll("[\[.\].\s+]", " ");
String num = listNumber.toString().replaceAll(",", "").replaceAll("[\[.\].\s+]", " ");
System.out.println(str); // prints: abc def ghi ikh oihik oig
System.out.println(num); // prints: 61 9 50 243 5 54