7 回答
TA贡献1884条经验 获得超4个赞
其实 Java 8 不需要 zip,
import java.util.*;
import java.util.stream.*;
查找对应集合为空的
List<String> result = IntStream.range(0, descArray.length)
.filter(i -> codeList.get(i) == null)
.mapToObj(i -> descArray[i])
.collect(Collectors.toList());
关联 Map
Map<String, Integer> codeCountMap = IntStream.range(0, descArray.length)
.boxed()
.collect(Collectors.toMap(
i -> codeList.get(i),
i -> descCouponInfoMap.get(descArray[i]).getCount()));
生成 Map
Map<String, String> descCodeMap = IntStream.range(0, descArray.length)
.boxed()
.collect(Collectors.toMap(
i -> descArray[i],
i -> codeList.get(i)));
TA贡献1874条经验 获得超12个赞
很明显这是你的问题。
你知道什么是类和对象吗?
一切都用list map,当然不行。
你定义一个优惠券类,有code和desc属性
List<Ticket> ticketList;
for(Ticket ticket:ticketList){
if(ticket.getCode()==null){
System.out.println(ticket.getDesc());
}
}
第二和第三个也不说了。
TA贡献1864条经验 获得超2个赞
楼主需要加强抽象设计和数据结构设计。
第1个场景,按位置对应就是一个非常不稳定的设计。应有具体类型
class Coupon {
int id; //对应位置,保证不重复,也不会错位。
String desc;
String code;
public boolean notUsed() {
return code == null;
}
}
这样在List中找code为空的会比较好找,但更好的是,用一个unusedList保存所有notUsedCoupon.
第2个场景做为分类统计,guava中有现成的分组方法,构造好分组后,每组的个数也就知道了。
第3个场景其实各自取一个属性并无必要,实际上完全可以构造一个对象引用到Foo和Bar,分别使用委托给
这两个对象。
就像上面有答主提到,这里缺少高层设计。当有a,b,c三个属性,如果分别设计三个List中,那么就会有
a->b,b->c的查找过程,复杂一点的操作还有a->(b, c)。如果它们在一个对象中,那么,只要a->o(a,b,c)就可
以完成大部分数据索引工作。
添加回答
举报