如何根据list返回对象中的某个字段的不同拆分成多个list

dlam9 2016-01-29 04:42:16
假如list 返回数据
用户ID 用户名
1010 admin
1010 admin
1020 xiaohua
1020 xiaohua
根据用户ID的不同 重新创建两个list
...全文
6446 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
红烧土豆盖饭 2018-07-24
  • 打赏
  • 举报
回复

public static void main(String[] args) {
List<Bean> list = new ArrayList<>();
list.add(new Bean("1010", "admin"));
list.add(new Bean("1020", "xiaohua"));
list.add(new Bean("1010", "admin"));
list.add(new Bean("1020", "xiaohua"));

Set<String> ids = new HashSet<>();
for (Bean item : list) {
ids.add(item.getId());
}
List<Bean> tempList;
for (String id : ids) {
tempList = new ArrayList<>();
for (Bean item : list) {
if (id.equals(item.getId())) {
tempList.add(item);
}
}
//分类获取tempList
}
}
Intboy 2016-02-01
  • 打赏
  • 举报
回复
放到set不就完了么?你目的就是去重嘛
tony4geek 2016-02-01
  • 打赏
  • 举报
回复 1
引用 11 楼 dlam9 的回复:
[quote=引用 10 楼 rui888 的回复:]



class JavaBean {
	public JavaBean(String id, String name) {
		this.id = id;
		this.name = name;
	}

	private String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	private String name;

	public JavaBean() {
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "{用户ID:" + this.id + ",  用户名:" + this.name + " }";
	}
}

public static void main(String[] args) {

		List<JavaBean> list = new ArrayList<JavaBean>();
		list.add(new JavaBean("1010", "admin"));
		list.add(new JavaBean("1010", "admin"));
		list.add(new JavaBean("1020", "xiaohua"));
		list.add(new JavaBean("1020", "xiaohua"));
		List<List<JavaBean>> groupList = getListByGroup(list);
		for (List<JavaBean> bean : groupList) {
			System.out.println(bean);
		}
	}

	private static List<List<JavaBean>> getListByGroup(List<JavaBean> list) {
		List<List<JavaBean>> result = new ArrayList<List<JavaBean>>();
		Map<String, List<JavaBean>> map = new TreeMap<String, List<JavaBean>>();

		for (JavaBean bean : list) {
			if (map.containsKey(bean.getId())) {
				List<JavaBean> t = map.get(bean.getId());
				t.add(new JavaBean(bean.getId(), bean.getName()));
				new ArrayList<JavaBean>().add(new JavaBean(bean.getId(), bean
						.getName()));
				map.put(bean.getId(), t);
			} else {
				List<JavaBean> t = new ArrayList<JavaBean>();
				t.add(new JavaBean(bean.getId(), bean.getName()));
				map.put(bean.getId(), t);
			}
		}
		for (Entry<String, List<JavaBean>> entry : map.entrySet()) {
			result.add(entry.getValue());
		}
		return result;
	}

[/quote if判断里 包含的时候 new ArrayList<JavaBean>().add(new JavaBean(bean.getId(), bean .getName())); 为什么还要创建这个list呢
没有用的,写的测试,忘记删除了。
dlam9 2016-02-01
  • 打赏
  • 举报
回复 1
[quote=引用 10 楼 rui888 的回复:]



class JavaBean {
	public JavaBean(String id, String name) {
		this.id = id;
		this.name = name;
	}

	private String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	private String name;

	public JavaBean() {
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "{用户ID:" + this.id + ",  用户名:" + this.name + " }";
	}
}

public static void main(String[] args) {

		List<JavaBean> list = new ArrayList<JavaBean>();
		list.add(new JavaBean("1010", "admin"));
		list.add(new JavaBean("1010", "admin"));
		list.add(new JavaBean("1020", "xiaohua"));
		list.add(new JavaBean("1020", "xiaohua"));
		List<List<JavaBean>> groupList = getListByGroup(list);
		for (List<JavaBean> bean : groupList) {
			System.out.println(bean);
		}
	}

	private static List<List<JavaBean>> getListByGroup(List<JavaBean> list) {
		List<List<JavaBean>> result = new ArrayList<List<JavaBean>>();
		Map<String, List<JavaBean>> map = new TreeMap<String, List<JavaBean>>();

		for (JavaBean bean : list) {
			if (map.containsKey(bean.getId())) {
				List<JavaBean> t = map.get(bean.getId());
				t.add(new JavaBean(bean.getId(), bean.getName()));
				new ArrayList<JavaBean>().add(new JavaBean(bean.getId(), bean
						.getName()));
				map.put(bean.getId(), t);
			} else {
				List<JavaBean> t = new ArrayList<JavaBean>();
				t.add(new JavaBean(bean.getId(), bean.getName()));
				map.put(bean.getId(), t);
			}
		}
		for (Entry<String, List<JavaBean>> entry : map.entrySet()) {
			result.add(entry.getValue());
		}
		return result;
	}

[/quote if判断里 包含的时候 new ArrayList<JavaBean>().add(new JavaBean(bean.getId(), bean .getName())); 为什么还要创建这个list呢
tony4geek 2016-02-01
  • 打赏
  • 举报
回复 4



class JavaBean {
	public JavaBean(String id, String name) {
		this.id = id;
		this.name = name;
	}

	private String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	private String name;

	public JavaBean() {
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "{用户ID:" + this.id + ",  用户名:" + this.name + " }";
	}
}

public static void main(String[] args) {

		List<JavaBean> list = new ArrayList<JavaBean>();
		list.add(new JavaBean("1010", "admin"));
		list.add(new JavaBean("1010", "admin"));
		list.add(new JavaBean("1020", "xiaohua"));
		list.add(new JavaBean("1020", "xiaohua"));
		List<List<JavaBean>> groupList = getListByGroup(list);
		for (List<JavaBean> bean : groupList) {
			System.out.println(bean);
		}
	}

	private static List<List<JavaBean>> getListByGroup(List<JavaBean> list) {
		List<List<JavaBean>> result = new ArrayList<List<JavaBean>>();
		Map<String, List<JavaBean>> map = new TreeMap<String, List<JavaBean>>();

		for (JavaBean bean : list) {
			if (map.containsKey(bean.getId())) {
				List<JavaBean> t = map.get(bean.getId());
				t.add(new JavaBean(bean.getId(), bean.getName()));
				new ArrayList<JavaBean>().add(new JavaBean(bean.getId(), bean
						.getName()));
				map.put(bean.getId(), t);
			} else {
				List<JavaBean> t = new ArrayList<JavaBean>();
				t.add(new JavaBean(bean.getId(), bean.getName()));
				map.put(bean.getId(), t);
			}
		}
		for (Entry<String, List<JavaBean>> entry : map.entrySet()) {
			result.add(entry.getValue());
		}
		return result;
	}

非典型宅男c 2016-02-01
  • 打赏
  • 举报
回复
建议你用map的键值对处理
dlam9 2016-02-01
  • 打赏
  • 举报
回复
引用 7 楼 rui888 的回复:
参考这个 相同的key就往list 里面方法
没懂
tony4geek 2016-02-01
  • 打赏
  • 举报
回复
参考这个 相同的key就往list 里面方法
dlam9 2016-02-01
  • 打赏
  • 举报
回复
引用 3 楼 xiaoquan123456 的回复:
遍历list,根据id创建新的list,把新的list按id存入map中;遇到第二个相同的id对象事,将list从map中取出,在放到取出list中
好复杂的样子
dlam9 2016-02-01
  • 打赏
  • 举报
回复
引用 2 楼 china_demon 的回复:
你的思路有问题,拆分完根据key值得唯一性,你放都没地方放。如果存到数据库或文本文件中,还可以后面的操作。
我就是之后要放到文本文件里呀
dlam9 2016-02-01
  • 打赏
  • 举报
回复
引用 楼主 dlam9 的回复:
假如list 返回数据 用户ID 用户名 1010 admin 1010 admin 1020 xiaohua 1020 xiaohua 根据用户ID的不同 重新创建两个list
我需要根据不同的用户ID 生成不同的csv文件
bree06 2016-02-01
  • 打赏
  • 举报
回复
我觉得完全不用拆分成多个list。可以根据数据不同的特性选择不同的写文件方法就行了。 第一种,整体数据量大,但是重复的ID多,且ID数量在百个以下的。可以采用打开多个流的形式来进行一次遍历。
Map<String, FileOutputStream> map = new HashMap<String, FileOutputStream>();
// Write file
for (JavaBean bean : list) {
    FileOutputStream os = map.get(bean.getId());
    if (os == null) {
        os = new FileOutputStream(bean.getId() +".txt");
        map.put(bean.getId(), os);
    }
    os.write(bean.toString().getBytes());
}
// Close stream
Collection<FileOutputStream> fos =  map.values();
for (Iterator<FileOutputStream> it = fos.iterator(); it.hasNext();) {
    it.next().close();
}
第二种,整体数据量不太大,但重复ID超过数百个胜至千个,此时不能同时打开几百个流写文件。可以先排序然后直接写文件,此时只会有一个流存在。
// 排序这一步可以放在数据库做。
list.sort(new Comparator<JavaBean>() {
    @Override
    public int compare(JavaBean o1, JavaBean o2) {
        return o1.getId().compareTo(o2.getId());
    }
});
FileOutputStream fos = null;
String id = null;
// Write file
for (JavaBean bean : list) {
    if (bean.getId().equals(id)) {
        fos.write(bean.toString().getBytes());
        continue;
    }
    if (fos != null)
        fos.close();
    fos = new FileOutputStream((id = bean.getId()) + ".txt");
    fos.write(bean.toString().getBytes());
}
knife_s 2016-02-01
  • 打赏
  • 举报
回复
java8的 lambad表达式,直接进行过滤
空心兜兜 2016-02-01
  • 打赏
  • 举报
回复
燃烧的岁月_ 2016-01-30
  • 打赏
  • 举报
回复
你的思路有问题,拆分完根据key值得唯一性,你放都没地方放。如果存到数据库或文本文件中,还可以后面的操作。
springdy 2016-01-30
  • 打赏
  • 举报
回复
遍历list,根据id创建新的list,把新的list按id存入map中;遇到第二个相同的id对象事,将list从map中取出,在放到取出list中
scmod 2016-01-29
  • 打赏
  • 举报
回复
拆分完怎么拿来用啊...

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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