如何在 Spring Boot 中添加 List 中元素的频率?
How to add frequency of elements from List in SpringBoot?
这是我的实体 class,我试图将元素的频率显示为数量,但每次我都得到 1 作为数量
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int productid;
private String productname;
private String purchaseamount;
@Transient
private int quantity;
这里我试图根据 productId 元素的频率获取数量,但对于每个产品我只得到 1
public List<AddingProductForView> getData(List<Integer> productid) {
List<AddingProductForView> findAllByProductIdIn = repository.findAllByproductidIn(productid);
for (int i = 0; i < findAllByProductIdIn.size(); i++) {
Set<Integer> distinct = new HashSet<>(productid);
for (Integer count : distinct) {
int frequency = Collections.frequency(productid, count);
findAllByProductIdIn.get(i).setQuantity(frequency);
}
}
return findAllByProductIdIn;
}
请求正文:-
[1,1,1,1,2,2]
[
{
"productid": 1,
"productname": "RO",
"purchaseamount": "4000 ",
"quantity": 1
},
{
"productid": 2,
"productname": "RO",
"purchaseamount": "8000 ",
"quantity": 1
}
]
预期结果:-
[
{
"productid": 1,
"productname": "RO",
"purchaseamount": "4000 ",
"quantity": 4
},
{
"productid": 2,
"productname": "RO",
"purchaseamount": "8000 ",
"quantity": 2
}
]
我能理解你的意思。
我尝试在我的开发环境中编写此代码。效果很好。
我建议一些方法
1.You最好debug
// whether frequency is exist or not.
int frequency = Collections.frequency(productid, count);
2.Do你真的要这样吗?如果这段代码执行,频率的结果是set.Because的最终实体,你不要使用if条件。[=14=]
for (int i = 0; i < findAllByProductIdIn.size(); i++) {
//distinct = [1,2]
Set<Integer> distinct = new HashSet<>(productid);
/** frequency is unconditionally 2. */
for (Integer count : distinct) {
int frequency = Collections.frequency(productid, count);
findAllByProductIdIn.get(i).setQuantity(frequency);
}
}
我可以检查频率和获取数量。我建议调试。
如果条件
你是必要的
loop : for (int i = 0; i < findAllByProductIdIn.size(); i++) {
Set<Integer> distinct = new HashSet<>(productid);
for (Integer count : distinct) {
if(findAllByProductIdIn.get(i).getProductId == count) {
int frequency = Collections.frequency(productid, count);
findAllByProductIdIn.get(i).setQuantity(frequency);
continue loop;
}
}
}
我修改了你的代码。这不是必要的 if 条件并且可以减少代码行
for (int i = 0; i < findAllByProductIdIn.size(); i++) {
int frequency = Collections.frequency(productid,findAllByProductIdIn.get(i).getProductId);
findAllByProductIdIn.get(i).setQuantity(frequency);
}
这是我的实体 class,我试图将元素的频率显示为数量,但每次我都得到 1 作为数量
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int productid;
private String productname;
private String purchaseamount;
@Transient
private int quantity;
这里我试图根据 productId 元素的频率获取数量,但对于每个产品我只得到 1
public List<AddingProductForView> getData(List<Integer> productid) {
List<AddingProductForView> findAllByProductIdIn = repository.findAllByproductidIn(productid);
for (int i = 0; i < findAllByProductIdIn.size(); i++) {
Set<Integer> distinct = new HashSet<>(productid);
for (Integer count : distinct) {
int frequency = Collections.frequency(productid, count);
findAllByProductIdIn.get(i).setQuantity(frequency);
}
}
return findAllByProductIdIn;
}
请求正文:- [1,1,1,1,2,2]
[
{
"productid": 1,
"productname": "RO",
"purchaseamount": "4000 ",
"quantity": 1
},
{
"productid": 2,
"productname": "RO",
"purchaseamount": "8000 ",
"quantity": 1
}
]
预期结果:-
[
{
"productid": 1,
"productname": "RO",
"purchaseamount": "4000 ",
"quantity": 4
},
{
"productid": 2,
"productname": "RO",
"purchaseamount": "8000 ",
"quantity": 2
}
]
我能理解你的意思。
我尝试在我的开发环境中编写此代码。效果很好。
我建议一些方法
1.You最好debug
// whether frequency is exist or not.
int frequency = Collections.frequency(productid, count);
2.Do你真的要这样吗?如果这段代码执行,频率的结果是set.Because的最终实体,你不要使用if条件。[=14=]
for (int i = 0; i < findAllByProductIdIn.size(); i++) {
//distinct = [1,2]
Set<Integer> distinct = new HashSet<>(productid);
/** frequency is unconditionally 2. */
for (Integer count : distinct) {
int frequency = Collections.frequency(productid, count);
findAllByProductIdIn.get(i).setQuantity(frequency);
}
}
我可以检查频率和获取数量。我建议调试。
如果条件
你是必要的loop : for (int i = 0; i < findAllByProductIdIn.size(); i++) {
Set<Integer> distinct = new HashSet<>(productid);
for (Integer count : distinct) {
if(findAllByProductIdIn.get(i).getProductId == count) {
int frequency = Collections.frequency(productid, count);
findAllByProductIdIn.get(i).setQuantity(frequency);
continue loop;
}
}
}
我修改了你的代码。这不是必要的 if 条件并且可以减少代码行
for (int i = 0; i < findAllByProductIdIn.size(); i++) {
int frequency = Collections.frequency(productid,findAllByProductIdIn.get(i).getProductId);
findAllByProductIdIn.get(i).setQuantity(frequency);
}