
//------在这里你得到一个ProductVopro1对象,并且将其属性进行了改动
ProductVopro1=(ProductVo)it.next()
//pro1.setOutPrice(pro1.getOutPrice())
//pro1.setProductName(pro1.getProductName())
//pro1.setProductId(pro1.getProductId())
pro1.setProductTotal(productTotal)//将数量也放入对象中
//------在这里你将该对象再一次添加到list中于是出现了重复对象的现象,可以去掉下一句代码问题即可解决
list.add(pro1)//将对象一起放入list中
}
//--------------注意从list中得到对象只是得到了它的引用,当你改动对象时其实是改动list中的对象。
//--------------再一次将该对象添加到list,那么list中拥有两个一样的对象,其实该对象就是同一对象,只不过被list两次引用。
Java中,list是可以重复的,但是set就不能重复了。在Java中,list成为列表,而set则是集合,集合中的元素是不可以重复的,但是列表中的是可以的,所以,list里面的元素是可以重复的。
通过题主的描述可以看到,其实就是一个List<Integer>的集合数据处理问题,希望把相同的数据放到一起,是一种归类 *** 作,也就是说其实总得需要把List<Integer>形式转化为Map<Integer, List<Integer>>的形式
这种形式map的key也就是当前的这个数字,而这个value就是这个数字对应的所有当前出现此key的集合
List<Integer> list = Arrays.asList(1, 1, 2, 3, 4, 2, 1)Map<Integer, List<Integer>> map = new HashMap<>()
for (Integer num : list){
// map是否包含此key,若已经包含则添加一个新的数字到对应value集合中
if (map.containsKey(num)){
map.get(num).add(num)
}else{
// map不包含此key,则重新创建一个新集合,并把这个数字添加进集合
// ,再把集合放到map中
List<Integer> newList = new ArrayList<>()
newList.add(num)
map.put(num, newList)
}
}
System.out.println(map)
输出结果
这只是简单把map打印出来,当然有了这个map,想怎么样输出都是可以的了
额外的,上面的那种写法虽然也还算简单明了,但是对于如今Java8中的流(Stream) *** 作而言,还是显得太复杂了,而且采用for这种外部循环告诉机器你要怎样循环怎么取值,怎样 *** 作实在繁琐,太过命令式编程,若采用Stream的方式来写上述过程就非常简答了,只需要告诉机器你要做什么就可以了,不用去管怎么循环,只管要什么 *** 作(把JDK升到8即可尝试以下代码)
// 第二种方式Java8 StreamMap<Integer, List<Integer>> map1 = list.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.toList()))
System.out.println(map1)
一行代码就搞定了,这里采用的是Collectors.groupingBy方法进行归类数据,里面两个参数代表分别代表:
如何把流中的数据进行归类,表示归类的依据,由于是数字本身,所以第一个参数传入Function.identity,就是代表本身的意思,数字相同就归类到一起
第二个参数是代表,把归类到一起的数字怎么合到一起,Collectors.toList代表就是把数字归类成集合,所以返回的就是Map<Integer, List<Integer>>,这正好是我们要的结果
由于Collectors.groupingBy默认是按照Collectors.toList的方式进行归类的,所以上面的代码还可以再减少一个参数,写为
// 第二种方式Java8 StreamMap<Integer, List<Integer>> map1 = list.stream().collect(Collectors.groupingBy(Function.identity()))
System.out.println(map1)
结果为
结果也是一样的,题主可以自行选择
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)