从返回字符串的方法创建ArrayList

时间:2018-11-21 13:11:07

标签: java

我有一个自定义类InfoAQ,该类具有称为public String getSeqInf()的方法。现在我有一个ArrayList<InfoAQ> infList和 我需要一个ArrayList<String>strList = new ArrayList<String>,其中包含每个元素的getSeqInf()内容。

我现在就是这样做的方式...

for(InfoAQ currentInf : infList)
  strList.add(currentInf.getSeqInf());

有其他替代方法吗?也许更快的一个或一个班轮?

5 个答案:

答案 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());
}`