解释下面代码:deptIds.addAll(a.parallelStream().map(item -> item.getAId().toString()).collect(Collectors.toSet()));
时间: 2023-06-05 21:05:13 浏览: 108
这段代码是将一个List中的对象根据其中的属性AId提取出来,然后转化为一个字符串Set集合,最终将Set集合中的所有元素添加到deptIds中。具体解释如下:
- `a.parallelStream()`:将List a转化为一个并行流,以便在处理大量数据时提高运行效率。
- `map(item -> item.getAId().toString())`:将并行流中的每个元素都映射为该元素的AId属性,并将它转化为字符串。
- `collect(Collectors.toSet())`:将并行流中的结果收集起来,转化为一个字符串Set集合。
- `deptIds.addAll()`:将Set集合中的所有元素添加到deptIds中去。
总之,这段代码的主要作用就是将List a中的AId属性提取出来,变成一个Set集合中的字符串元素,再将该Set中的所有元素添加到deptIds中。
相关问题
请为我优化下面的代码用Collections.shuffle实现随机商品推荐,用getRand(int Num)代替避免随机出现的商品重复:public List<Object> getRandTen() { List<Object> randList = new ArrayList<>(); for (int i = 0; i < 10; i++) { int rand = (int) (Math.random() * 4); // 随机生成0~3的整数 switch (rand) { case 0: randList.addAll(a.getRand()); break; case 1: randList.addAll(b.getRand()); break; case 2: randList.addAll(c.getRand()); break; case 3: randList.addAll(d.getRand()); break; default: break; } } return randList; }
可以使用Collections.shuffle()方法来实现随机商品推荐。同时,可以使用一个Set来保存已经选过的商品,避免重复选择。
以下是优化后的代码:
```
public List<Object> getRandTen() {
List<Object> randList = new ArrayList<>();
Set<Object> selectedSet = new HashSet<>();
int num = 10; // 需要选取的商品数量
while (num > 0) {
int rand = (int) (Math.random() * 4); // 随机生成0~3的整数
switch (rand) {
case 0:
randList.addAll(getRand(a, selectedSet, num));
break;
case 1:
randList.addAll(getRand(b, selectedSet, num));
break;
case 2:
randList.addAll(getRand(c, selectedSet, num));
break;
case 3:
randList.addAll(getRand(d, selectedSet, num));
break;
default:
break;
}
num = 10 - randList.size();
}
Collections.shuffle(randList);
return randList;
}
private List<Object> getRand(Object obj, Set<Object> selectedSet, int num) {
List<Object> randList = new ArrayList<>();
while (num > 0) {
Object randObj = ((RandInterface) obj).getRand();
if (!selectedSet.contains(randObj)) {
randList.add(randObj);
selectedSet.add(randObj);
num--;
}
}
return randList;
}
public interface RandInterface {
Object getRand();
}
class A implements RandInterface {
public Object getRand() {
// 返回随机商品
}
}
class B implements RandInterface {
public Object getRand() {
// 返回随机商品
}
}
class C implements RandInterface {
public Object getRand() {
// 返回随机商品
}
}
class D implements RandInterface {
public Object getRand() {
// 返回随机商品
}
}
```
在上面的代码中,我们定义了一个RandInterface接口,用于表示可以随机获取一个商品的类。A、B、C、D类实现了该接口,并且提供了getRand()方法来获取随机商品。
在getRandTen()方法中,我们使用一个Set来保存已经选过的商品,然后在每次随机选取商品时,先判断该商品是否已经被选过,如果已经被选过,则跳过,继续选取下一个商品。直到选出了10个不重复的商品之后,再使用Collections.shuffle()方法来打乱商品的顺序。
List<String> list= new ArrayList<>(); List<String> leaderId = departs.stream().filter(depart -> StringUtils.isNotBlank(depart.getFdLeaderId())).map(Depart::getFdLeaderId).collect(Collectors.toList()); List<String> etxLeaderId = departs.stream().filter(depart -> StringUtils.isNotBlank(depart.getFdLeaderExtId())).map(Depart::getFdLeaderExtId).collect(Collectors.toList()); list = account.stream().filter(departAccountVo -> StringUtils.isNotBlank(departAccountVo.getFdAccountId())).map(DepartAccountVo::getFdAccountId).collect(Collectors.toList()); list.addAll(leaderId); list.addAll(etxLeaderId); list = list.stream().distinct().collect(Collectors.toList()); 优化这段代码
可以使用链式调用的方式,避免重复的流操作,同时也可以在收集器中使用toSet()方法来去重。优化后的代码如下:
```
List<String> list = departs.stream()
.flatMap(depart -> Stream.of(depart.getFdLeaderId(), depart.getFdLeaderExtId()))
.filter(StringUtils::isNotBlank)
.distinct()
.collect(Collectors.toList());
list.addAll(account.stream()
.map(DepartAccountVo::getFdAccountId)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList()));
```
阅读全文