我有一个返回这样的列表的函数:-
List <Column <String1, String2>>
接下来我想将此列表传递给第二个函数,但是 第二个函数只需要一个列表,其中仅包含上述列表的列的第一部分(字符串1)。
所以我想将此列表传递给第二个函数:-
List <String1>
我的用例:这两个函数都来 self 用来访问 Web 应用程序的数据库(Cassandra)的库。第一个函数为我提供了所有列的列表,其中包含名称(String1)和值(String2)两部分。因此,第一个函数为我提供了所有列的列表(每个列都有两个字符串),然后我只需使用列名称列表将其提供给第二个函数,该函数将在数据库中查询这些列。
由于在从数据库请求单个页面的数据之前,我需要执行这项工作至少 2-3 次,因此我需要一种超快速且相当有效的方法来执行此操作。
最佳答案
这取决于“高效”的含义(内存、执行时间,还是其他什么?)以及第二个函数正在做什么。
如果您关心速度,并且第二个函数将重复查看列表中的项目,那么您可能应该将字符串复制到新的 List<String>
中。 :
List<String> strings = new ArrayList<String>(input.size());
for (Column<String, String> column : input) {
strings.add(column.name());
}
return strings;
另一方面,如果第二个函数仅查看项目的一小部分,或者如果您更关心内存而不是速度,那么您可能需要一个惰性 View 来在访问项目时对其进行转换。 Lists.transform
Google Guava 可以为您做到这一点:
return Lists.transform(input, new Function<Column<String, String>, String>() {
public String apply(Column<String, String> column) {
return column.name();
}
};
请注意,您可能希望将 Function 创建为单独的静态类,除非您同意它保留对封闭实例的引用。为了简洁/清晰起见,我在这里使用了一个匿名类。
关于Java集合列表: Converting from List '<Column <String1, String2>>' to 'List <String1>' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5049400/