初学者问题:在Java中是否可以拆分循环? 例如下面的内容,我想拆分
for(int i=0; i<bucket.size(); i++){
do something
}
比方说bucket.size = 10 一分为二。
为存储桶中的前9个值做一些事情
为存储桶中的最后一个值做某事
答案 0 :(得分:3)
最直接:
for(int i=0; i<bucket.size()-1; ++i){
do something
}
do something else
使用List.sublist
for (Buck buck : bucket.subList(0, bucket.size()-1)) {
do something
}
// (Might want to check exists...)
Buck buck = bucket.get(bucket.size()-1);
do something else
答案 1 :(得分:1)
for (int i=0; i<bucket.size()-1; i++){
if (i < 9)
{
//DO
}
else if (i == bucket.size()-2)
//-2 because the loop condition is < not <= but also includes a -1
//Only works with bucket size 11 or greater or it will just enter the i< 9 instead
{
//DO for final time in loop
}
}
只需在块中使用其他条件即可找到所需的内容。
您可以将&&
用于AND,将||
用于OR,然后将< > <= >= ==
尽管您的循环 如果您希望循环执行10次。 int size = 10;
for (int i=0; i<=size-1; i++){
}
答案 2 :(得分:1)
如果您使用的是LinkedList
,则可以调用removeLast
方法,该方法将删除并返回最后一个元素。
LinkedList<Integer> bucket= new LinkedList<>();
int last = bucket.removeLast();
// do something with the last item here
for (Integer i : bucket) {
// Do something for all items except the last one
}
答案 3 :(得分:1)
我会使用while循环
private void InsertRecords(string fileName)
{
var user = userRepository.GetCurrentUser();
try
{
foreach (DataRow row in dt.Rows)
{
string zipCode = FormatZipcode.Format(row[9].ToString());
db.Locations.Add(new Location
{
UserId = user.Id,
LocationName = row[0].ToString() ?? "",
LocationId = row[1].ToString() ?? "",
LocationType = row[2].ToString() ?? "",
DistributionCenter = row[3].ToString() ?? "",
OpenDate = row[4].ToString() ?? "",
Address1 = row[5].ToString() ?? "",
Address2 = row[6].ToString() ?? "",
City = row[7].ToString() ?? "",
State = row[8].ToString() ?? "",
Zipcode = zipCode ?? "",
Country = row[10].ToString() ?? "",
FileName = fileName ?? "",
Date = System.DateTime.Now
});
}
db.SaveChanges();
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
throw;
}
}
答案 4 :(得分:0)
如果只想对最后一个值做某事,那就去做。这将假定OP声明了一个非空列表。
// Doing something for first size-1 values.
for(int i=0; i<bucket.size()-1; i++){
// do something with
bucket.get(i);
}
// Now do something with last value.
bucket.get(bucket.size()-1);
答案 5 :(得分:0)
嗯,有很多方法可以帮助您实现这一目标。如果您只是想对最后一个元素进行something else
,对其他元素进行something
,我想您应该这样做:
int lastIndex = bucket.size() - 1;
for (int i = 0; i < lastIndex; i++) {
Type item = bucket.get(i);
//do something with item
}
if(lastIndex != -1) {
Type item = bucket.get(lastIndex);
// do something else with item
}
这样,您可以避免每次进行比较并节省一次迭代(我知道这不是很大的优势)。
尽管,如果您的列表确实很大并且您需要一种有效的方法,或者甚至用例更加复杂,则应考虑使用Spliterators
:
答案 6 :(得分:0)
您可以利用skip
中的limit
和Stream
方法
//first 9 elements
bucket.stream().limit(9).forEach(s -> {
//do smth
});
//remaining elements
bucket.stream().skip(9).forEach(s -> {
//do smth
});