AKI*_*WEB 54 java collections list arraylist
解析后我的文件"s"包含 AttributeGet:1,16,10106,10111
所以我需要在attributeIDGet List中获取冒号后面的所有数字.我知道有几种方法可以做到这一点.但是我们有什么方法可以直接转换List<String>
为List<Integer>
.
由于下面的代码抱怨类型不匹配,所以我尝试做Integer.parseInt,但我想这对List不起作用.这是s字符串.
private static List<Integer> attributeIDGet = new ArrayList<Integer>();
if(s.contains("AttributeGet:")) {
attributeIDGet = Arrays.asList(s.split(":")[1].split(","));
}
Run Code Online (Sandbox Code Playgroud)
Kev*_*vin 64
不,你需要遍历数组
for(String s : strList) intList.add(Integer.valueOf(s));
Run Code Online (Sandbox Code Playgroud)
Daw*_*ień 53
使用Java8:
stringList.stream().map(Integer::parseInt).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
小智 11
您可以使用 Java 8 的 Lambda 函数来实现此目的,而无需循环
String string = "1, 2, 3, 4";
List<Integer> list = Arrays.asList(string.split(",")).stream().map(s -> Integer.parseInt(s.trim())).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
小智 10
使用lambda:
strList.stream().map(org.apache.commons.lang3.math.NumberUtils::toInt).collect(Collectors.toList());
番石榴转换器可以解决问题.
import com.google.common.base.Splitter;
import com.google.common.primitives.Longs;
final Iterable<Long> longIds =
Longs.stringConverter().convertAll(
Splitter.on(',').trimResults().omitEmptyStrings()
.splitToList("1,2,3"));
Run Code Online (Sandbox Code Playgroud)
不,您将不得不迭代每个元素:
for(String number : numbers) {
numberList.add(Integer.parseInt(number));
}
Run Code Online (Sandbox Code Playgroud)
发生这种情况的原因是没有直接的方法将一种类型的列表转换为任何其他类型.有些转换是不可能的,或者需要以特定方式完成.本质上,转换取决于所涉及的对象和转换的上下文,因此没有"一刀切"的解决方案.例如,如果你有一个Car
对象和一个Person
对象怎么办?你不能直接将a转换List<Car>
为a List<Person>
,因为它没有意义.
如果您使用Google Guava库,则可以执行此操作,请参阅Lists#transform
String s = "AttributeGet:1,16,10106,10111";
List<Integer> attributeIDGet = new ArrayList<Integer>();
if(s.contains("AttributeGet:")) {
List<String> attributeIDGetS = Arrays.asList(s.split(":")[1].split(","));
attributeIDGet =
Lists.transform(attributeIDGetS, new Function<String, Integer>() {
public Integer apply(String e) {
return Integer.parseInt(e);
};
});
}
Run Code Online (Sandbox Code Playgroud)
是的,同意上面的答案,它是臃肿,但时尚.但这只是另一种方式.
归档时间: |
|
查看次数: |
100004 次 |
最近记录: |