gpt4 book ai didi

java - 在 Java 8 流 foreach 中查找元素的索引

转载 作者:行者123 更新时间:2023-11-29 04:09:10 24 4
gpt4 key购买 nike

已经有一些帖子看起来与此相关,我浏览了它们,但那些并没有解决我的问题:

我有一个方法和一些逻辑,我必须使用流优化代码

我的方法是:(这里我尝试以格式化的方式打印邮件)

public static StringBuilder printEmailsListFormat(ArrayList<String> a) {

StringBuilder sb = new StringBuilder();

for (int i = 0; i < a.size(); i++) {
if (i % 3 ==0)
{
sb.append(String.format("%-45s", a.get(i)));
sb.append("\n");
}
else
sb.append(String.format("%-45s", a.get(i)));
}
return sb;
}

我必须优化这段代码。

最佳答案

如果您想优化您的代码,您不应该切换到 Stream API。相反,将其更改为使用单个 Formatter,而不是每个元素一个(隐藏在 String.format 中)并避免由 String.format 创建的临时字符串:

public static StringBuilder printEmailsListFormat(List<String> a) {
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb);
for(int i = 0; i < a.size(); i++) {
formatter.format("%-45s", a.get(i));
if(i % 3 ==0) sb.append("\n");
}
return sb;
}

鉴于这种特定情况下格式的简单性,您甚至可以完全消除 Formatter:

static final String EMPTY_CELL = String.format("%45s", ""); //JDK11: " ".repeat(45);

public static StringBuilder printEmailsListFormat(List<String> a) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < a.size(); i++) {
String s = a.get(i);
sb.append(s);
if(s.length() < EMPTY_CELL.length())
sb.append(EMPTY_CELL, s.length(), EMPTY_CELL.length());
if(i % 3 ==0) sb.append("\n");
}
return sb;
}

关于java - 在 Java 8 流 foreach 中查找元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56112239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com