我需要在java 8中创建一个工具来搜索全部位于同一文件夹中的.xml文件列表。每个文件都包含此类型的信息:
library(visNetwork)
nodes <- data.frame(id = 1:10,color = c(rep("blue",6),
rep("red",3),
rep("green",1)))
edges <- data.frame(from = c(1,2,3,3,4,5,6,7,8,9),
to = c(2,3,4,8,5,6,7,8,9,10),
length = c(2,1,1,1,1,1,1,1,1,1))
nodes <- data.frame(nodes, level = edges$from)
visNetwork(nodes, edges,
height = "500px", width = "100%",
main = "Straight Edges") %>%
visHierarchicalLayout(edgeMinimization = T,
blockShifting = T ,
levelSeparation = 89 ) %>%
visEdges(
# =========================
smooth = FALSE, # ========================= straight edges
# =========================
shadow = TRUE,
arrows =list(to = list(enabled = TRUE, scaleFactor = 2)),
color = list(color = "black", highlight = "red")
)
需要的是一个可以通过以下方式从单个或多个搜索/查询,FACT代码及其值中提取的工具:
<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有CREDIT_CARD_EXPIRED = false,AND,AUTO_PAY = true 哪个ID有CREDIT_CARD_EXPIRED = true,OR,AUTO_PAY = false Id xxxxxxxxx
的TOTAL_DUE_AMOUNT个事实的值是多少?我对以下几件事感兴趣: 1-使用什么数据结构 2-如何迭代所有文件
绩效并不像灵活性那样重要。
提前致谢
答案 0 :(得分:2)
假设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
的所有ID。