Java 使用多个列进行分组有问题吗?
我有这个方法:Java 使用多个列进行分组有问题吗?,java,Java,我有这个方法: public List<IncomeChannelCategoryMap> allIncomeChannels(final List<String> list) { final CriteriaQuery<IncomeChannelCategoryMap> criteriaQuery = builder.createQuery(IncomeChannelCategoryMap.class); final Root<Inco
public List<IncomeChannelCategoryMap> allIncomeChannels(final List<String> list) {
final CriteriaQuery<IncomeChannelCategoryMap> criteriaQuery = builder.createQuery(IncomeChannelCategoryMap.class);
final Root<IncomeChannelMapEntity> root = criteriaQuery.from(IncomeChannelMapEntity.class);
final List<Selection<?>> selections = new ArrayList<>();
selections.add(root.get(IncomeChannelMapEntity_.incomeChannel).get(IncomeChannelEntity_.code));
selections.add(root.get(IncomeChannelMapEntity_.logicalUnitCode));
selections.add(root.get(IncomeChannelMapEntity_.logicalUnitIdent));
selections.add(root.get(IncomeChannelMapEntity_.keyword));
criteriaQuery.multiselect(selections);
Predicate codePredicate = root.get(IncomeChannelMapEntity_.incomeChannel).get(IncomeChannelEntity_.code).in(list);
criteriaQuery.where(codePredicate);
return entityManager.createQuery(criteriaQuery).getResultList();
}
从
一切都很好,但有一个问题:
例如,直销可以有另一个logicalUnitCode,所以现在我只得到一个,我想为logicalUnitCode取得成功,就像我为logicalUnitCode取得成功一样
有什么建议吗?
因此,我想要实现的是:
{
"incomeChannelCode": "DIRECT_SALES",
"logicalUnitCode": "R_CATEGORY","R_TYPE",
"logicalUnitIdent": "7,8"
}
以下是您的更新代码:
@Override
public List<IncomeChannelCategoryMap> allIncomeChannels(final EntityRequest<IncomeChannel> request) throws ApiException {
List<String> lists = request.getEntity().getIncomeChannels();
List<IncomeChannelCategoryMap> channels = incomeChannelMapDAO.allIncomeChannels(lists);
return new ArrayList<>(channels.stream().collect(Collectors.toMap(IncomeChannelCategoryMap::getIncomeChannelCode,
Function.identity(), (i1, i2) -> {
i1.setLogicalUnitIdent(i1.getLogicalUnitIdent() + ", " + i2.getLogicalUnitIdent());
if (!i1.getLogicalUnitCode().contains(i2.getLogicalUnitCode())) {
i1.setLogicalUnitCode(i1.getLogicalUnitCode() + ", " + i2.getLogicalUnitCode());
}
return i1;
})).values());
}
@覆盖
公共列表allIncomeChannels(最终EntityRequest请求)引发异常{
List lists=request.getEntity().getIncomeChannels();
列表通道=incomechannellmapdao.allIncomeChannels(列表);
返回新的ArrayList(channels.stream().collect(Collectors.toMap)(IncomeChannelCategoryMap::getIncomeChannelCode、,
Function.identity(),(i1,i2)->{
i1.SetLogicalInitiadent(i1.GetLogicalInitiadent()+”,“+i2.GetLogicalInitiadent());
如果(!i1.getLogicalUnitCode()。包含(i2.getLogicalUnitCode())){
i1.setLogicalUnitCode(i1.getLogicalUnitCode()+”,“+i2.getLogicalUnitCode());
}
返回i1;
})).values());
}
就像
logicalinitident
一样,现在logicalUnitCode
也将被分组。这里我假设你不想在这里重复。我所说的重复是指,如果两个结果的logicalUnitCode
都是“R\u CATEGORY”
,那么您希望它作为输出一次。如果一个是“R\u CATEGORY”
,另一个是“R\u TYPE”
,则希望将它们分组为“R\u CATEGORY,R\u TYPE”
,作为输出。如果我的假设是正确的,那么这就是您所需的答案。您好,无。那R\u类型
是从哪里来的?我在原始输出中看不到它。
[
{
"incomeChannelCode": "DIRECT_SALES",
"logicalUnitCode": "R_CATEGORY",
"logicalUnitIdent": "7"
},
{
"incomeChannelCode": "DIRECT_SALES",
"logicalUnitCode": "R_CATEGORY",
"logicalUnitIdent": "8"
}
]
{
"incomeChannelCode": "DIRECT_SALES",
"logicalUnitCode": "R_CATEGORY","R_TYPE",
"logicalUnitIdent": "7,8"
}
@Override
public List<IncomeChannelCategoryMap> allIncomeChannels(final EntityRequest<IncomeChannel> request) throws ApiException {
List<String> lists = request.getEntity().getIncomeChannels();
List<IncomeChannelCategoryMap> channels = incomeChannelMapDAO.allIncomeChannels(lists);
return new ArrayList<>(channels.stream().collect(Collectors.toMap(IncomeChannelCategoryMap::getIncomeChannelCode,
Function.identity(), (i1, i2) -> {
i1.setLogicalUnitIdent(i1.getLogicalUnitIdent() + ", " + i2.getLogicalUnitIdent());
if (!i1.getLogicalUnitCode().contains(i2.getLogicalUnitCode())) {
i1.setLogicalUnitCode(i1.getLogicalUnitCode() + ", " + i2.getLogicalUnitCode());
}
return i1;
})).values());
}