gpt4 book ai didi

java - 将 ArrayList 转换为 ArrayList 是一种好方法吗?
转载 作者:行者123 更新时间:2023-11-30 07:04:16 24 4
gpt4 key购买 nike

基于此 Spring 教程:http://www.roseindia.net/tutorial/spring/spring3/ioc/springlistproperty.html我有一个问题。我使用 Spring 框架创建了一个对象列表,但我想获取列表列表。从 ArrayList 转换为 ArrayList 是不可能的,所以我创建了自己的静态方法来完成它。我们有两个类:

学生:

public class Student {
private String name;
private String address;

//getters and setters
}

大学:

import java.util.List;

public class College {
private List<Object> list;

public List<Object> getList() {
return list;
}

public void setList(List<Object> list) {
this.list = list;
}
}

和context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="Student" class="testing.Student">
<property name="name" value="Thomas"/>
<property name="address" value="London"/>
</bean>

<bean id="College" class="testing.College">

<property name="list">
<list>
<value>1</value>
<ref bean="Student"/>
<bean class="testing.Student">
<property name="name" value="John"/>
<property name="address" value="Manchester"/>
</bean>
</list>
</property>
</bean>
</beans>

这是我的主要方法:

public static void main(String[] args) {
BeanFactory beanFactory = new ClassPathXmlApplicationContext(
"context.xml");
College college = (College) beanFactory.getBean("College");
}

我想在这里做的是通过从包含对象列表的大学对象接收它来制作通用的 Student ArrayList。这是我的解决方案:

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.ArrayList;

public class MainTest {

//This is my casting static method:

public static ArrayList<Student> castListToStudent(College college) {
ArrayList<Student> casted = new ArrayList<Student>();
Student s = null;
for (int i = 0; i < college.getList().size(); i++) {

if (college.getList().get(i) instanceof Student) {
s = (Student) college.getList().get(i);
casted.add(s);
}
}
return casted;
}

public static void main(String[] args) {
BeanFactory beanFactory = new ClassPathXmlApplicationContext(
"context.xml");
College college = (College) beanFactory.getBean("College");
ArrayList<Student> list = castListToStudent(college);

for (Student s : list) {
System.out.println(s);
}
}
}

看起来它在工作,但问题是 - 这是将一个列表安全地转换为另一个列表的最佳方式吗?

最佳答案

使用 Guava :

List<Object> objects = Lists.newArrayList();
objects.add("A");
objects.add("B");
List<String> strings = FluentIterable.from(objects).filter(String.class).toList();

此示例返回一个 ImmutableList 如果您需要一个可变列表 (ArrayList):

List<String> strings = Lists.newArrayList(Iterables.filter(objects, String.class));

objects 中的任何不是 String 的元素(在我的示例中)都将被忽略。这是一个完全类型安全的解决方案,不需要任何自行编写的方法。

关于java - 将 ArrayList<Object> 转换为 ArrayList<MyObject> 是一种好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27781284/

24 4 0