我需要在java 8中创建一个工具来搜索位于同一个文件夹中的.xml文件列表。每个文件都包含这种类型的信息:
<id>135719887</id>
<FactValue>
<name>FACT.DOCUMENT.TOTAL_DUE_AMOUNT</name>
<valueString>832.15</valueString>
</FactValue>
<FactValue>
<name>FACT.DOCUMENT.AUTO_PAY</name>
<valueString>false</valueString>
</FactValue>
<FactValue>
<name>FACT.DOCUMENT.CREDIT_CARD_EXPIRED</name>
<valueString>false</valueString>
</FactValue>
<FactValue>
<name>FACT.DOCUMENT.HAS_SEDONA_CHARGES</name>
<valueString>true</valueString>
</FactValue> 所需的是一个工具,它可以从单个或多个搜索/查询中提取事实代码及其值,方法如下:
id type value
---------- -------------------- -------
135719887 TOTAL_DUE_AMOUNT 832.15
135719887 AUTO_PAY false
135719887 CREDIT_CARD_EXPIRED false
135719887 HAS_SEDONA_CHARGES true例如,查询如下:
哪些Id具有CREDIT_CARD_EXPIRED = false,以及AUTO_PAY = true哪个Id具有CREDIT_CARD_EXPIRED = true,OR,AUTO_PAY = false Id xxxxxxxxx的TOTAL_DUE_AMOUNT事实值是多少?
我对以下几件事感兴趣: 1-使用什么数据结构2-如何迭代所有文件
性能不像灵活性那么重要。
提前感谢
发布于 2018-01-15 14:10:15
假设FooDto是XML的POJO类,那么您可以执行如下操作:
public static void main(String[] args) throws Exception {
JAXBContext jaxbContext = JAXBContext.newInstance(FooDto.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
FooDto fooDto1 = (FooDto) jaxbUnmarshaller.unmarshal(getInput("/Foo1.xml"));
FooDto fooDto2 = (FooDto) jaxbUnmarshaller.unmarshal(getInput("/Foo2.xml"));
List<String> ids = Stream.of(fooDto1, fooDto2)
.filter(Main::creditCardIsNotExpired)
.map(FooDto::getId)
.collect(Collectors.toList());
}
private static boolean creditCardIsNotExpired(FooDto foo) {
return Arrays.stream(foo.getFactValue())
.anyMatch(fact -> fact.getName().equals("FACT.DOCUMENT.CREDIT_CARD_EXPIRED")
&& fact.getValueString().equals("false"));
}这个例子给出了CREDIT_CARD_EXPIRED == false的所有ids。
https://stackoverflow.com/questions/48263225
复制相似问题