我有一个自定义类InfoAQ
,该类具有称为public String getSeqInf()
的方法。现在我有一个ArrayList<InfoAQ> infList
和
我需要一个ArrayList<String>strList = new ArrayList<String>
,其中包含每个元素的getSeqInf()
内容。
我现在就是这样做的方式...
for(InfoAQ currentInf : infList)
strList.add(currentInf.getSeqInf());
有其他替代方法吗?也许更快的一个或一个班轮?
答案 0 :(得分:2)
是的,有:
strList = infList.stream().map(e -> g.getSeqInf()).collect(Collectors.toList());
map
步骤也可以用另一种方式编写:
strList = infList.stream().map(InfoAQ::getSeqInf).collect(Collectors.toList());
,称为方法引用传递。这两个解决方案是等效的。
答案 1 :(得分:0)
使用流
infList.stream()
.map(InfoAQ::getSeqInf)
.collect(Collectors.toCollection(ArrayList::new))
在此处使用Collectors.toCollection
创建一个ArrayList
,该Collectors.toList()
将保存结果,就像处理案例一样。 (如果您要做关心结果列表类型,则很重要,因为this.props.user.permissions === 'ADMIN' ? <Grid.Column floated='right' width={5}>
<Button primary className={styles.formButton}>Remittance</Button>
<Button primary className={styles.reportButton}>Generate Report + </Button>
</Grid.Column> : null
不能保证这一点)
由于使用流有一些开销,可能不是最快的。您需要进行衡量/基准测试以了解其性能
答案 2 :(得分:0)
也许也是这样:
List<String> strList = new ArrayList<String>();
infList.forEach(e -> strList.add(e.getSeqInf()));
答案 3 :(得分:0)
还有另一个(衬里,如果您将其格式化为一行):
infList.forEach(currentInf -> {strList.add(currentInf.getSeqInf());});
我希望使用更多行的格式:
infList.forEach(currentInf -> {
strList.add(currentInf.getSeqInf());
});
答案 4 :(得分:0)
This code will iterate all the data in the list, as getSeqInf returns a String, the collect method will store all returns of the getSeqInf method in a list.
`List listString = infList.stream().map(InfoAQ::getSeqInf).collect(Collectors.toList());`
or
`
ArrayList<String> listString = new ArrayList<>();
for(int i = 0; i < infoAq.size(); i++) {
listString.add(infoAq.get(i).getSeqInf());
}`