gpt4 book ai didi

java - 用于过滤和修改列表项的 Lambdaj 或 apache 谓词

转载 作者:行者123 更新时间:2023-11-30 04:58:08 24 4
gpt4 key购买 nike

我正在开发一个数据加载器,使用 Spring Batch 实现,即读取多个平面文件,处理 pojo 列表并将其以 1000 的提交间隔写入数据库。
从文件读取的每一行都会转换为一个 pojo 对象,其中包含需要在处理结果上设置的属性。

我有一个查找表,其中包含三列 180 行。我将每个列值保留在单独的列表中,并在谓词中迭代该列表以与每个 POJO 项属性匹配。如果在所有列表中找到匹配项,则将设置一个属性。以下是我使用的谓词,

public class LogicProcessor<I, O> implements ItemProcessor<I, O> {

private Map[] params ;

public void setParams( Map[] params )
{
this.params = params;
}

public O process(I item) throws Exception
{
System.out.println(params );

List container = (List) params[1].get("SRVC");
final List callInd = (List) container.get(0);
final List totaltype = (List) container.get(1);
final List servicetype = (List) container.get(2);

Predicate<I> callIndipredicate = new Predicate<I>() {
public boolean apply(I input)
{
boolean flag=false;
for (int i=0;i<callInd.size();i++)
{
if ( "*".equals(callInd.get(i)))
{
flag= true;
break;
} else
{
try
{
if (BeanUtils.getProperty(input,"CALLINDICATOR").equals(callInd.get(i)))
{
flag = true;
break;
} else
{
flag= false;
break;
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}

}
}
return flag;
}
};

Predicate<I> totaltyppredicate = new Predicate<I>() {
public boolean apply(I input)
{
boolean flag=false;
for (int i=0;i<totaltype.size();i++)
{
try
{
if (BeanUtils.getProperty(input,"TOTALTYPE").equals(totaltype.get(i)))
{
flag = true;
break;
} else
{
flag= false;
break;
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
return flag;
}
};

Predicate<I>srvctypepredicate = new Predicate<I>() {
public boolean apply(I input)
{
boolean flag=false;
for (int i=0;i<servicetype.size();i++)
{
try
{
if (BeanUtils.getProperty(input,"SERVICETYPE").equals(servicetype.get(i)))
{
flag = true;
break;
} else
{
flag= false;
break;
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
return flag;
}
};

Predicate<I> isFound = Predicates.and(callIndipredicate,totaltyppredicate,srvctypepredicate);
int preorPost= Iterables.indexOf(Arrays.asList(item), isFound) ;
System.out.println(preorPost);
if (preorPost >=0)
{
BeanUtils.setProperty(item, "PREPOST", '0');
} else
{
BeanUtils.setProperty(item, "PREPOST", 'X');
}
return (O) item;
}

}

有没有更好的方法使用 Guava 来过滤和修改项目。

最佳答案

Guava :使用Iterables.findPredicate进行数据库查找。申请transform结果为 Function .

Commons:使用FilterListIterator (或 FilterIterator)与 Predicate 结合,然后是 TransformIteratorTransformer .

不了解 LambdaJ。

关于java - 用于过滤和修改列表项的 Lambdaj 或 apache 谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7851123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com