我有一个返回如下列表的函数: -
List <Column <String1, String2>>
接下来我想将此列表传递给第二个函数,但是 第二个函数只需要一个列表,其中只包含上面列表的第一部分(string1)。
所以我想把这个列表传递给第二个函数: -
List <String1>
我的用例:这两个函数都来自我用来访问Web应用程序的数据库(Cassandra)的库。第一个函数给我一个列表,其中包含两个部分名称(String1)和值(String2)。所以第一个函数给我一个列的所有列(每个列都有两个字符串)然后我只需要使用列名列表将它提供给第二个函数,它将查询数据库中的那些列。
由于我需要在从DB请求单页数据之前至少完成2-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)