假设我有一些像这样的
foreach
循环:
Set<String> names = new HashSet<>();
//some code
for (String name: names) {
//some code
}
有没有办法在没有计数器的情况下检查
foreach
内部的实际名称是Set
中的最后一个? 我在这里没有找到这样的问题。
为了简单和易于理解,我会这样做:
Set<String> names = new HashSet<>();
Iterator<String> iterator = names.iterator();
while (iterator.hasNext()) {
String name = iterator.next();
//Do stuff
if (!iterator.hasNext()) {
//last name
}
}
此外,这取决于您想要实现的目标。假设您正在实现用逗号分隔每个名称的常见用例,但不在末尾添加空逗号:
Set<String> names = new HashSet<>();
names.add("Joao");
names.add("Pereira");
//if the result should be Joao, Pereira then something like this may work
String result = names.stream().collect(Collectors.joining(", "));
其他答案是完全足够的,只需为给定的问题添加此解决方案即可。
Set<String> names = new HashSet<>();
//some code
int i = 0;
for (String name: names) {
if(i++ == names.size() - 1){
// Last iteration
}
//some code
}
没有,看一下Java的“foreach”循环是如何工作的?
您必须更改循环以显式使用迭代器或 int 计数器。
如果您正在使用一个复杂的对象而不仅仅是一个简单的列表/设置,下面的代码可能会有所帮助。只需添加一个映射函数即可在收集之前实际获取所需的字符串。
String result = violations.stream().map(e->e.getMessage()).collect(Collectors.joining(", "));
是的,有一种方法可以在
foreach
内部检查它,使用计数器:
Set<String> names = new HashSet<>();
int i = names.size() - 1;
for (String name: names) {
if (i-- == 0) {
// some code for last name
}
//some code
}
考虑一下,
names.size()
仅在循环外被调用一次。这使得循环比在循环内多次处理它更快。
没有内置方法来检查当前元素是否也是最后一个元素。除此之外,您使用的是
HashSet
,它不能保证退货订单。即使您想检查它,例如使用索引 i
最后一个元素可能总是不同的。
A
Set
不保证其中商品的订单。 您可以循环遍历 Set
一次并检索“abc”作为“最后一项”,下次您可能会发现“hij”是 Set
中的“最后一项”。
话虽这么说,如果您不关心顺序,而只是想知道在当前时刻观察
Set
时任意的“最后一项”是什么,则没有内置方法可以做到这一点。 您必须使用计数器。
.map(String::toString) 是多余的,因为 HashSet 已经包含 String 值。不要使用 Set 来连接字符串,因为顺序不确定。
List<String> nameList = Arrays.asList("Michael", "Kate", "Tom");
String result = nameList.stream().collect(Collectors.joining(", "));
有一种简单的方法可以通过抛出一个条件来完成此操作。 认为这是你的数组:
int odd[] = {1,3,5,7,9,11};
并且您想将其全部打印在一行中,除了最后一行之外,中间用“-”连字符。
for(int aa:odd) {
System.out.print(aa);
if(odd[odd.length - 1] != aa)
System.out.print(" - ");
}
这个条件
if( odd[odd.length - 1] != aa )
会检查你是否不在最后一个元素中,所以你仍然可以添加“-”,否则你不会添加它。
List<String> list = Arrays.asList("1", "2", "3");
for (String each : list) {
if (list.indexOf(each) == (list.size() - 1)) {
System.out.println("last loop");
}
}
注意:Set 不是有序集合。