Java集合列表:从列表'<column <string1,=“”string2 =“”>&gt;'转换到'List <string1>'</string1> </column>

时间:2011-02-19 07:01:23

标签: java arrays list collections java-ee

我有一个返回如下列表的函数: -

List <Column <String1, String2>>

接下来我想将此列表传递给第二个函数,但是 第二个函数只需要一个列表,其中只包含上面列表的第一部分(string1)。

所以我想把这个列表传递给第二个函数: -

List <String1>

我的用例:这两个函数都来自我用来访问Web应用程序的数据库(Cassandra)的库。第一个函数给我一个列表,其中包含两个部分名称(String1)和值(String2)。所以第一个函数给我一个列的所有列(每个列都有两个字符串)然后我只需要使用列名列表将它提供给第二个函数,它将查询数据库中的那些列。

由于我需要在从DB请求单页数据之前至少完成2-3次这样的工作,我需要一种超快且合理有效的方法来实现这一目标。

3 个答案:

答案 0 :(得分:3)

这取决于你所说的“高效”(记忆,执行时间,其他什么?)以及第二个功能正在做什么。

如果您关心速度并且第二个函数将重复查看列表中的项目,那么您应该只是将字符串复制到新的List<String>

List<String> strings = new ArrayList<String>(input.size());
for (Column<String, String> column : input) {
    strings.add(column.name());
}
return strings;

另一方面,如果第二个函数只是查看项目的一小部分,或者如果你更关心内存而不是速度,那么你可能想要一个在访问项目时转换项目的惰性视图。来自Google Guava的Lists.transform可以为您执行此操作:

return Lists.transform(input, new Function<Column<String, String>, String>() {
    public String apply(Column<String, String> column) {
        return column.name();
    }
};

请注意,您可能希望将其作为单独的静态类创建,除非您可以保持对封闭实例的引用。为了简洁/清晰起见,我在这里使用了匿名课程。

答案 1 :(得分:0)

我认为没有比简单地走过第一个列表并向每个Column询问String1更简单的方法,然后将该值添加到List<String1>

如果你想分开行走和添加,那么考虑编写一个Iterator,它从第一个列表返回所有String1,然后使用遍历那个。

答案 2 :(得分:-1)

在Scala中,您可以这样做:

stringsList = columnsList.map(_.string2)