我正在编写一个函数,本质上我一遍又一遍地做同样的事情。我有下面列出的功能
public String buildGarmentsString(List<Garment> garments)
{
StringBuilder garmentString = new StringBuilder(10000);
for(int i=0;i<4;i++)
{
garmentString.append(this.garmentProductId(i,garments.get(i).getProductId()));
garmentString.append(this.garmentColor(i,garments.get(i).getColor()));
for(int j=0;j<garments.get(i).getSizes().size();j++)
{
//check xxsml
if(garments.get(i).getSizes().get(j).getXxsml() >0)
{
garmentString.append(this.garmentSizes(i, Size.xxsml(),garments.get(i).getSizes().get(j).getXxsml()));
}
//check xsml
if(garments.get(i).getSizes().get(j).getXsml() > 0)
{
garmentString.append(this.garmentSizes(i,Size.xsml(),garments.get(i).getSizes().get(j).getXsml()));
}
//check sml
if(garments.get(i).getSizes().get(j).getSml() > 0)
{
garmentString.append(this.garmentSizes(i,Size.sml(),garments.get(i).getSizes().get(j).getSml()));
}
//check med
if(garments.get(i).getSizes().get(j).getMed() > 0)
{
garmentString.append(this.garmentSizes(i,Size.med(),garments.get(i).getSizes().get(j).getMed()));
}
//check lrg
if(garments.get(i).getSizes().get(j).getLrg() > 0)
{
garmentString.append(this.garmentSizes(i,Size.lrg(),garments.get(i).getSizes().get(j).getLrg()));
}
//check xlrg
if(garments.get(i).getSizes().get(j).getXlg() > 0)
{
garmentString.append(this.garmentSizes(i,Size.xlg(),garments.get(i).getSizes().get(j).getXlg()));
}
//check xxlrg
if(garments.get(i).getSizes().get(j).getXxl() >0)
{
garmentString.append(this.garmentSizes(i,Size.xxlg(),garments.get(i).getSizes().get(j).getXxl()));
}
//check xxxlrg
if(garments.get(i).getSizes().get(j).getXxxl() >0)
{
garmentString.append(this.garmentSizes(i,Size.xxxlg(),garments.get(i).getSizes().get(j).getXxxl()));
}
}
}
}
这是我的 dressSizes 函数:
public String garmentSizes(int garmentNumber, String size,int numberToSend)
{
String garmentSizes = "&garment["+garmentNumber+"][sizes]["+size+"]="+numberToSend;
return garmentSizes;
}
我正在尝试弄清楚如何使用更少的代码来完成此任务。我读过,通过函数式编程,您可以执行诸如将函数传递给其他函数的参数之类的操作。在网上阅读了一些内容后,我想我想做这样的事情,但我不确定最好的方法是什么。
我在这里阅读了一些有关堆栈溢出的内容,并且看到人们提到使用命令模式、FunctionalJava 或 LambdaJ 来尝试在 Java 中近似此功能。我已经阅读了这两个库的文档并阅读了有关命令模式的维基百科文章,但我仍然不确定如何使用其中任何一个来解决我的特定问题。有人可以向我解释一下吗?作为一个从未做过任何函数式编程的人,这有点令人困惑。
最佳答案
- 您可以使用局部变量来减少重复次数。例如,
bySize = dresss.get(i).getSizes().get(j)
。 - 您可以使用枚举来获取尺寸并循环使用尺寸,而不是
size.getXxsml()
、size.getXsml()
等。
整个事情看起来像:
for(int j=0;j<garments.get(i).getSizes().size();j++) {
bySize = garments.get(i).getSizes().get(j);
for (Size s : Size.values()) {
if (bySize.get(s) > 0) {
garmentString.append(garmentSizes(i, s, bySize.get(s)));
}
}
}
bySize.get(s)
方法可以通过指向正确方法的开关来实现,也可以直接在枚举中实现,并且您可以摆脱 getXsml
等等方法。
关于java - 如何使用函数式编程来进行字符串操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21652723/