java8 groupby 对多个字段进行去重, 统计 partitioningBy

根据userId进行分组,userID为Long型

List<GxqFwzxFileitemedit> list = gxqFwzxFileitemeditService.selectFileItemAll(gxqFwzxFileitemedit);

*按照usrId进行分组*/
Map<Long,List<GxqFwzxFileitemedit>> groupBy = list.stream().collect(Collectors.groupingBy(GxqFwzxFileitemedit::getUserId));*/
		/*List<GxqFwzxFileitemedit> listAll1 = new ArrayList<>();

/先根据fillDate进行分组,再进行userId分组/

List<GxqFwzxFileitemedit> list = gxqFwzxFileitemeditService.selectFileItemAll(gxqFwzxFileitemedit);
		/*先根据fillDate进行分组,再进行userId分组*/
Map<Long, Map<String, List<GxqFwzxFileitemedit>>> groupBy = list.parallelStream().collect(Collectors.groupingBy(GxqFwzxFileitemedit::getUserId,Collectors.groupingBy(GxqFwzxFileitemedit::getFillDate)));

对分组数据进行遍历,存放listAll中

List<Map<String,Object>> listAll = new ArrayList<>();
		for(Long key :groupBy.keySet()){
			for(String fillDateKey:groupBy.get(key).keySet()){
				Map<String,Object> map = new HashMap<>();
				//sublFlag数据状态0-未提交、1-已提交(审核中)、2-驳回、3-通过
				GxqFwzxFileitemedit gxqFwzxFileitem = groupBy.get(key).get(fillDateKey).get(0);
				int sublFlag = gxqFwzxFileitem.getSublFlag();
				Long userId = gxqFwzxFileitem.getUserId();
				String userName = gxqFwzxFileitem.getUserName();
				String fillDate = gxqFwzxFileitem.getFillDate();
				int number = gxqFwzxFileitem.getNumber();
				map.put("sublFlag", sublFlag);
				map.put("userId", userId);
				map.put("userName", userName);
				map.put("fillDate", fillDate);
				for(GxqFwzxFileitemedit editValue:groupBy.get(key).get(fillDateKey)){
					Map fileValueMap = new HashMap();
					//subl_flag状态为0-未提交的不展示
				/*if(0 == editValue.getSublFlag()) {
					break;
				}*/
					fileValueMap.put("fileValue",editValue.getFileValue());
					fileValueMap.put("fileType",editValue.getFileType());
				/*根据类型对tabIdOrAppeId进行赋值*/
					if(Constants.TABLE_TYPE.equals(editValue.getFileType())){
						fileValueMap.put("tabIdOrAppeId", editValue.getDetailTabId());
					}else if(Constants.APPENDIX_TYPE.equals(editValue.getFileType())) {
						fileValueMap.put("tabIdOrAppeId", editValue.getAppendixId());
					}else{
						fileValueMap.put("tabIdOrAppeId","");
					}

					map.put(editValue.getFileName(),fileValueMap);
				}
				listAll.add(map);
			}
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 MongoDB 使用 Java 进行查询时, 可以使用 Aggregation Framework 对某一个字段进行去重。 示例: ``` db.collection.aggregate([ { $group: { _id : "$field", uniqueIds: { $addToSet: "$_id" }, count: { $sum: 1 } } } ]) ``` 上面的示例,将会按照字段 field 对文档进行分组,并且统计出每组数据不同 _id 的数量。 请注意,上面的代码片段的 collection 和 field 需要替换成实际的集合名称和字段名称。 ### 回答2: 在使用Java对MongoDB进行查询时,想要对某一个字段进行去重操作,我可以使用MongoDB的聚合操作来实现。 首先,我可以使用Aggregation类创建聚合管道,并将需要进行去重字段作为聚合操作的一部分。然后,我可以使用$group操作符将字段进行分组,以便进行去重操作。 具体来说,我可以使用以下代码示例来实现对某一个字段进行去重: ```java MongoCollection<Document> collection = database.getCollection("myCollection"); AggregateIterable<Document> result = collection.aggregate(Arrays.asList( Aggregates.group("$myField") )); List<String> uniqueValues = new ArrayList<>(); for (Document document : result) { String value = document.getString("_id"); uniqueValues.add(value); } System.out.println("去重后的结果:" + uniqueValues); ``` 在上述代码,"myCollection"是我要查询的集合名称,"$myField"是需要进行去重字段名称。聚合操作首先根据"$myField"字段进行分组,然后遍历聚合结果并将去重后的值添加到uniqueValues集合。最终,我可以输出uniqueValues集合来查看去重后的结果。 值得注意的是,对于大数据量的集合,聚合操作可能会需要较长时间才能完成。如果需要优化性能,可以考虑使用索引或其他优化方法来加快查询速度。 综上所述,通过使用MongoDB的聚合操作,我可以方便地对某一个字段进行去重操作。以上是一个简单的示例,你也可以根据具体需求进行适当的调整和扩展。 ### 回答3: 在Java,使用mogo进行查询时,对某一个字段进行去重可以通过以下步骤实现: 1. 首先,使用mogo的Java API或者驱动连接到MongoDB数据库。 2. 创建一个查询对象,设置查询条件。可以使用BasicDBObject类来创建查询对象,并使用其put方法将查询条件添加到对象。例如,可以使用put方法以字段名和字段值的形式添加要进行查询的字段条件。 3. 调用查询对象的distinct方法,并传入要进行去重字段名作为参数。这将返回一个包含该字段去重后的结果集合。 4. 使用Java的迭代器或者循环遍历结果集合,获取每个去重后的字段值并进行进一步处理。 以下是一个示例代码,演示如何使用mogo查询时对某一个字段进行去重(假设去重字段名为"fieldName"): ```java import com.mongodb.*; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class MongoDistinctExample { public static void main(String[] args) { try { // 连接到MongoDB数据库 MongoClient mongoClient = new MongoClient("localhost", 27017); DB db = mongoClient.getDB("yourDBName"); // 创建查询对象并设置查询条件 BasicDBObject query = new BasicDBObject(); query.put("fieldName", "yourQueryValue"); // 执行去重查询 List distinctValues = db.getCollection("yourCollectionName").distinct("fieldName", query); // 遍历去重后的结果集合 Iterator iterator = distinctValues.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } // 关闭数据库连接 mongoClient.close(); } catch (MongoException e) { e.printStackTrace(); } } } ``` 以上代码演示了如何使用mogo查询时对某一个字段进行去重,你可以根据自己的实际需求修改查询条件和数据库信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值