[英]Nested loop conversion to Java Stream
我有一個List<Person>
人。 我需要迭代一個數字列表並為每個人設置一個自定義數字,例如person.setCustomNumber()
,如下所示:
代碼如下所示:
public static void main(String[] args) {
List<Long> customNumnbers = new ArrayList<>();
customNumnbers.add(100000l);
customNumnbers.add(100001l);
customNumnbers.add(100002l);
customNumnbers.add(100003l);
customNumnbers.add(100004l);
customNumnbers.add(100005l);
customNumnbers.add(100006l);
customNumnbers.add(100007l);
customNumnbers.add(100008l);
List<Person> persons = new ArrayList<>();
persons.add(new Person("Robert"));
persons.add(new Person("Jim"));
persons.add(new Person("Mark"));
persons.add(new Person("Beto"));
persons.add(new Person("Reando"));
Map<String, Long> map = new HashMap<>();
List<Long> possibleNumbers = customNumnbers.subList(0, persons.size());
int n = 0;
while(n != possibleNumbers.size()) {
for (int j = 0; j < persons.size(); j++) {
persons.get(j).setCustomNumer(possibleNumbers.get(n));
map.put(persons.get(j).getName(), persons.get(j).getCustomNumer());
n++;
}
}
map.entrySet().stream().forEach(System.out::println);
}
class Person {
private Long id;
private String name;
private Long customNumer;
// relevant constructor, getters and setters
}
我想在 java 流中重寫此邏輯,並為每個類似Map<String, Long>
map 的名稱和自定義編號返回一個新的 map。
您可以在循環中分配數字:
int assignableCount = Math.min(persons.size(), possibleNumbers.size());
for (int i = 0; i < assignableCount; i++)
persons.get(i).setCustomNumber(possibleNumbers.get(i));
然后使用流構建 map:
Map<String, Long> map = persons.stream()
.collect(Collectors.toMap(Person::getName, Person::getCustomNumber);
整個事情可以使用IntStream.range(int, int)
來簡化。
// assure the runtime exception is not thrown due to exceeding any of the lists size
int n= Math.min(customNumnbers.size(), persons.size());
Map<String, Long> map = IntStream.range(0, n) // iterate indixes 0..n
.boxed() // Stream<Integer> rather than IntStream
.collect(Collectors.toMap( // collect to a Map<String, Long>
i -> persons.get(i).getName(), // .. Person's name as a key from persons
customNumbers::get)); // .. the Long as a value from customNumbers
順便提一句。 您在customNumnbers
中有一個錯字,應該是customNumbers
- 我在我的解決方案中修復了它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.