如何解决迭代 List 并显示每个对象的一个字段的值的最有效方法是什么?
列表中有很多 OrderDTO
对象。
包含 2 个项目的示例:
final List<OrderDTO> orderList = new ArrayList<OrderDTO>();
final List<OrderDTO> orderList = new ArrayList<OrderDTO>();
final OrderDTO order1 = new OrderDTO("1","100");
final OrderDTO order2 = new OrderDTO("2","200");
orderList.add(order1);
orderList.add(order2);
OrderDTO
具有字段,例如 orderId
和 stateId
。
我想在日志中显示:
"1","2"
或
"100","200"
在 Java 11 中,迭代列表并显示每个对象的一个字段的值的最有效方法是什么?
解决方法
虽然迭代集合的一种方式可能比其他方式更高效,但在您的用例中它根本无关紧要。花费最多时间的部分是打印元素,而不是迭代集合的方式。通常打印一些输出比仅仅迭代一个集合花费数千倍的时间。如果您只是迭代超过 1000 万个元素,则可能需要 100 毫秒。如果您在该循环内添加 System.out.println
,则可能需要几分钟才能执行。
简而言之,不值得考虑在您的用例中进行优化。
另外,关于“过早优化”的内容可能值得一读 - 除非您确实看到了一些性能问题,否则不要优化某些内容。
,由于一开始我也很困惑,当我开始处理日志时,网络带来了截然不同的结果如何去做,我很难找到一个简单的helloworld示例,下面的简单示例可能会帮助其他人:
import java.util.List;
import java.util.stream.Collectors;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Example {
private static final Logger LOG = LoggerFactory.getLogger(Example.class);
public static void main(String[] args) {
final List<OrderDTO> orderList = List.of(new OrderDTO("1","100"),new OrderDTO("2","200"));
LOG.info("ids: {}",orderList.stream().map(OrderDTO::getOrderId).collect(Collectors.toList()));
LOG.info("states: {}",orderList.stream().map(OrderDTO::getStateId).collect(Collectors.toList()));
}
@Getter
@Setter
@AllArgsConstructor
private static class OrderDTO {
String orderId;
String stateId;
public OrderDTO() {
}
}
}
输出
[main] INFO newpackage.Example - ids: [1,2]
[main] INFO newpackage.Example - states: [100,200]
假设您已将此依赖项添加到您的 pom:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.28</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<type>jar</type>
</dependency>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。