有苹果a、b、c、d、e、f、g共7个,需要按苹果顺序分配
张三 需要分配1个
李四 需要分配2个 不能分配到:b
王五 需要分配4个 不能分配到:a、b、c
- 各位巨佬求个思路,我自己想到的太麻烦要循环好几次,还需要进行调换,基本随着分配人数增加,循环次数就要增加
- 后续这个方法的参数就是
assignTask(List<本次分配苹果集合>,List<参与分配的人>,Map<用户id,List<排除苹果集合>>)
有苹果a、b、c、d、e、f、g共7个,需要按苹果顺序分配
张三 需要分配1个
李四 需要分配2个 不能分配到:b
王五 需要分配4个 不能分配到:a、b、c
assignTask(List<本次分配苹果集合>,List<参与分配的人>,Map<用户id,List<排除苹果集合>>)
没有测试,大概思路
/**
* 分配苹果
* @param apples 所有的苹果
* @param userMap 人-需要的苹果数量
* @param excludeAppleMap 人-不能分配的苹果
* @return Map<人, 分配的苹果id>
*/
public Map<String, List<String>> assignTask(List<String> apples, Map<String, Integer> userMap, Map<String, List<String>> excludeAppleMap) {
List<String> useApples = Lists.newArrayList();
return userMap
.entrySet()
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> {
List<String> needApple = apples
.stream()
.filter(apple -> !excludeAppleMap.get(entry.getKey()).contains(apple))
.filter(apple -> !useApples.contains(apple))
.limit(entry.getValue())
.collect(Collectors.toList());
useApples.addAll(needApple);
return needApple;
}
));
}
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答3k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
不是和八皇后问题类似么