2015-06-29 42 views
3

我应该做的是通过stream.generate创建一个随机数的ArrayList。下面的代码是我尝试将它保存到一个ArrayList中,但它是“object”类型的。我想我必须首先将它映射为int,但我不知道如何。代码现在不起作用。将生成的流保存到ArrayList中

public ArrayList<Integer> createRandomList(ArrayList<Integer> list, int amount) { 
    ArrayList<Integer> a = Arrays.asList(Stream.generate(new Supplier<Integer>() { 
        @Override 
        public Integer get() { 
         Random rnd = new Random(); 
         return rnd.nextInt(100000); 
        } 
       }).limit(amount).mapToInt.toArray()); 
} 

回答

3

你可以使用一个收集器:

return Stream.generate (() -> new Random().nextInt(100000)) 
      .limit(amount) 
      .collect (Collectors.toList()); 

这将产生一个List<Integer>虽然不一定是ArrayList<Integer>

它会更有意义,虽然创建一个单一的随机实例:

final Random rnd = new Random(); 
return Stream.generate (() -> rnd.nextInt(100000)) 
      .limit(amount) 
      .collect (Collectors.toList()); 
+2

好的,收集操作到底做了什么? – taclight

+1

@taclight它使用提供的收集器收集流的元素。 'Collectors.toList()'是一个收集器,它创建一个List实例,将所有Stream元素添加到它,并返回该List。 – Eran

+1

它如何知道列表中的元素必须是哪种类型? – taclight

2

您可以使用直接从使用ints(...)Random对象创建整数流,使用boxed()盒子里,用收集来存储结果:

return new Random().ints(amount, 0, 100000) 
        .boxed() 
        .collect(Collectors.toCollection(ArrayList::new)); 
+1

...并且如果OP坚持以后有一个'ArrayList','.collect(Collectors.toCollection(ArrayList :: new))'。也许你想补充一点。 – Holger

+1

@霍尔谢谢 – taclight

+0

@霍尔:更新,谢谢。 –

相关问题