如何在Java 8中编写for循环等效项

时间:2019-02-13 05:02:52

标签: java java-8

下面的代码段尝试添加100个用户,然后在console中打印。但是我需要使用Instream.range(1,100)...来实现Java 8中的等效循环。

public class UsersMain {

    public static void main(String[] args)  {

     List<Users>  users =new ArrayList<>();
        for (int i=0;i<=100;i++) {
            users.add(new Users());
        }
  }
}

带构造函数的用户类:

public class Users  {
    public Users() {
    }
}

2 个答案:

答案 0 :(得分:2)

it("test my case"){
  val oldMap = Map(10 -> Test(10, 1, 2, 1, 2), 25 -> Test(25, 3, 4, 3, 4), 46 -> Test(46, 3, 4, 3, 4), 26 -> Test(26, 1, 2, 1, 2))
  val newMap = Map(32 -> Test(32, 5, 6, 5, 6), 26 -> Test(26, 5, 6, 5, 6))
  val result = mergeMaps(oldMap, newMap)
  //Total elements count should be map 1 elements + map 2 elements
  assert(result.size == 5)
  //Common key element aggMin and aggMax should be updated, keep min aggMin and max aggMax from 2 common key elements and keep min and max of second map key
  assert(result.get(26).get.aggMin == 1)//min aggMin -> min(1,5)
  assert(result.get(26).get.aggMax == 6)//max aggMax -> max(2,6)
  assert(result.get(26).get.min == 5)// 5 from second map
  assert(result.get(26).get.max == 6)//6 from second map
}

您可以使用任何 List<Users> users = IntStream.range(0, 100) .mapToObj(i -> new Users()) .collect(Collectors.toList()); range()方法,两者之间的主要区别是:

  

rangeClosed()方法生成一个从起始值开始的数字流   但在达到最终值之前停止,即开始值包含在内   最终值是排他的。示例:range()生成一个   int类型的“ 1,2,3,4”流。

     

IntStream.range(1,5)方法从头开始生成数字流   值,并在生成结束值后停止,即开始值是   包容性和最终价值也包括在内。例:   rangeClosed()生成类型为“ 1,2,3,4,5”的流   长。

答案 1 :(得分:0)

您可以将rangeClosedmapToObj用作:

List<Users> users = IntStream.rangeClosed(0, 100) // rangeClosed for '<='
        .mapToObj(i -> new Users()) // would prefer at least an 'index' attribute to distinguish these objects
        .collect(Collectors.toList()); // collectin to a list

注意 :尽管以上代码与您的for循环相同,但是如果您要专门添加100个用户,则必须使用range代替的rangeClosed