list集合问题

削个椰子皮oo 2018-09-17 04:49:36
TimeVo tv1 = new TimeVo("1月",5);
TimeVo tv2 = new TimeVo("2月",3);
TimeVo tv3 = new TimeVo("3月",5);
TimeVo tv4 = new TimeVo("3月",4);
TimeVo tv5 = new TimeVo("3月",1);
TimeVo tv6 = new TimeVo("4月",2);
List<TimeVo> list1 = new ArrayList<TimeVo>();
list1.add(tv1);
list1.add(tv2);
list1.add(tv3);
list1.add(tv4);
list1.add(tv5);
list1.add(tv6);
最后要输出list变成1月:5,2月 :3,3月:10, 4月:2 求大神解答
...全文
321 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
getdate 2018-09-19
  • 打赏
  • 举报
回复
把colspan改成对应的值
  • 打赏
  • 举报
回复
 for (int i = 0; i < list1.size(); i++) {
for (int j = i + 1; j < list1.size(); j++) {
if (null != list1.get(i).getMonth() && list1.get(i).getMonth().equals(list1.get(j).getMonth())) {
list1.get(i).setNum(list1.get(i).getNum() + list1.get(j).getNum());
list2.add(list1.get(j));
}
}
}
list1.removeAll(list2);
  • 打赏
  • 举报
回复
List<TimeVo> list2 = new ArrayList<>();
削个椰子皮oo 2018-09-18
  • 打赏
  • 举报
回复
引用 8 楼 java1357924680 的回复:
TimeVO覆盖equals方法,这样就可以用contains或者......
具体参照:
关于关于list集合分组问题


感谢!
削个椰子皮oo 2018-09-18
  • 打赏
  • 举报
回复
引用 7 楼 baijifeilong 的回复:

package bj;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

final class App {
public static void main(String[] args) throws Throwable {
TimeVo tv1 = new TimeVo("1月", 5);
TimeVo tv2 = new TimeVo("2月", 3);
TimeVo tv3 = new TimeVo("3月", 5);
TimeVo tv4 = new TimeVo("3月", 4);
TimeVo tv5 = new TimeVo("3月", 1);
TimeVo tv6 = new TimeVo("4月", 2);
List<TimeVo> list1 = new ArrayList<TimeVo>();
list1.add(tv1);
list1.add(tv2);
list1.add(tv3);
list1.add(tv4);
list1.add(tv5);
list1.add(tv6);

List<TimeVo> resultList = list1.stream()
.collect(Collectors.groupingBy($ -> $.month))
.entrySet().stream()
.map($ -> new TimeVo($.getKey(), $.getValue().stream().mapToInt(x -> x.count).sum()))
.sorted(Comparator.comparing($ -> $.month))
.collect(Collectors.toList());
resultList.forEach($ -> System.out.println(String.format("%s:%s", $.month, $.count)));
}

static class TimeVo {
String month;
int count;

TimeVo(String month, int count) {
this.month = month;
this.count = count;
}

@Override
public String toString() {
return "TimeVo{" +
"month='" + month + '\'' +
", count=" + count +
'}';
}
}
}

您好! list1.stream() 这个方法是java1.8的新特性吧。我用的1.7没有这个方法
java1357924680 2018-09-18
  • 打赏
  • 举报
回复
TimeVO覆盖equals方法,这样就可以用contains或者......
具体参照:
关于关于list集合分组问题
baijifeilong 2018-09-18
  • 打赏
  • 举报
回复

package bj;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

final class App {
public static void main(String[] args) throws Throwable {
TimeVo tv1 = new TimeVo("1月", 5);
TimeVo tv2 = new TimeVo("2月", 3);
TimeVo tv3 = new TimeVo("3月", 5);
TimeVo tv4 = new TimeVo("3月", 4);
TimeVo tv5 = new TimeVo("3月", 1);
TimeVo tv6 = new TimeVo("4月", 2);
List<TimeVo> list1 = new ArrayList<TimeVo>();
list1.add(tv1);
list1.add(tv2);
list1.add(tv3);
list1.add(tv4);
list1.add(tv5);
list1.add(tv6);

List<TimeVo> resultList = list1.stream()
.collect(Collectors.groupingBy($ -> $.month))
.entrySet().stream()
.map($ -> new TimeVo($.getKey(), $.getValue().stream().mapToInt(x -> x.count).sum()))
.sorted(Comparator.comparing($ -> $.month))
.collect(Collectors.toList());
resultList.forEach($ -> System.out.println(String.format("%s:%s", $.month, $.count)));
}

static class TimeVo {
String month;
int count;

TimeVo(String month, int count) {
this.month = month;
this.count = count;
}

@Override
public String toString() {
return "TimeVo{" +
"month='" + month + '\'' +
", count=" + count +
'}';
}
}
}
削个椰子皮oo 2018-09-18
  • 打赏
  • 举报
回复
引用 1 楼 getdate 的回复:

List<Test1> mergeBeanList = new ArrayList<Test1>();
for (int i = 0; i < list1.size(); i++) {
Test1 bean = list1.get(i);
String tempJx002 = bean.getName();
int colspan = 1;
for (int j = i + 1; j < list1.size(); j++) {
String jx002 = list1.get(j).getName();
if (tempJx002 != null && tempJx002.equals(jx002)) {
colspan = colspan + 1;
list1.remove(j);
i = j;
i--;
j--;
} else if (j != 1 && j < list1.size() && colspan > 1) { // 中间
break;
} else if (j == 1) { // 第二条和第一条不同.
break;
}
}
Test1 test = new Test1();
test.setColspan(colspan);
test.setId(bean.getId());
test.setName(bean.getName());
mergeBeanList.add(test);
}


思路就是上面的思路,改成你对应的类,把colspan改成对应的值,即可.

您好,我最后要将三月份的数量加起来的,你这个代码好像没有加起来
削个椰子皮oo 2018-09-18
  • 打赏
  • 举报
回复
[quote=引用 2 楼 getdate 的回复:]
大哥,我这个月份就是有序的
wildyy 2018-09-18
  • 打赏
  • 举报
回复
1.按楼上的方法重新将list的内容处理一遍。
2.写个类继承ArrayList,覆盖add方法,在add时做处理。然后使用你创建的类作为list的实现。
getdate 2018-09-17
  • 打赏
  • 举报
回复
一定要记住,集合中的数据必须是有序的,根据你的情况,需要根据月份排序的.
getdate 2018-09-17
  • 打赏
  • 举报
回复

List<Test1> mergeBeanList = new ArrayList<Test1>();
for (int i = 0; i < list1.size(); i++) {
Test1 bean = list1.get(i);
String tempJx002 = bean.getName();
int colspan = 1;
for (int j = i + 1; j < list1.size(); j++) {
String jx002 = list1.get(j).getName();
if (tempJx002 != null && tempJx002.equals(jx002)) {
colspan = colspan + 1;
list1.remove(j);
i = j;
i--;
j--;
} else if (j != 1 && j < list1.size() && colspan > 1) { // 中间
break;
} else if (j == 1) { // 第二条和第一条不同.
break;
}
}
Test1 test = new Test1();
test.setColspan(colspan);
test.setId(bean.getId());
test.setName(bean.getName());
mergeBeanList.add(test);
}


思路就是上面的思路,改成你对应的类,把colspan改成对应的值,即可.

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧