Java 8 如何从流中检索筛选值并使用它
我不熟悉Java 8: 我必须将这段java 6代码转换为java 8版本:Java 8 如何从流中检索筛选值并使用它,java-8,Java 8,我不熟悉Java 8: 我必须将这段java 6代码转换为java 8版本: List<String> unvalidnumbers = new ArrayList<>(); StringBuilder content = new StringBuilder(); String str = "current_user" for (Iterator<String> it = numbers.iterator(); it.hasNext();) {
List<String> unvalidnumbers = new ArrayList<>();
StringBuilder content = new StringBuilder();
String str = "current_user"
for (Iterator<String> it = numbers.iterator(); it.hasNext();) {
String number = it.next();
try {
PersIdentifier persIdentifier = this.getPersIdentifierByNumber(number);
if (persIdentifier != null) {
content.append(number).append(";").append(str);
if (StringUtils.equals(persIdentifier.getType(), "R")) {
content.append(";X");
}
if (it.hasNext()) {
content.append("\r\n");
}
}
} catch (BusException e) {
LOGGER.warn("Pers not found", e);
unvalidnumbers.add(number);
}
}
我知道它缺少这一部分:
if (StringUtils.equals(persIdentifier.getType(), "R")) {
content.append(";X");
}
if (it.hasNext()) {
content.append("\r\n");
}
但我没有找到检索相应persIdentifier对象的方法。
如果您使用Java 8,您应该使用功能更强大的方法。
用
collect()代替forEach
。这里Collectors.joining()
看起来很合适。
未经测试,但您应该有一个总体想法:
String result =
numbers.stream()
.map(number -> new SimpleEntry<String, PersIdentifier>(number, this.getPersIdentifierByNumber(number) )
.filter(entry -> entry.getValue() != null)
.map(entry ->{
final String base = entry.getKey() + ";" + str;
return "R".equals(entry.getValue().getType()) ? base + ";X" : base;
})
.collect(joining("\r\n")); // Or not OS dependent : System.lineSeparator()
字符串结果=
numbers.stream()
.map(编号->新建SimpleEntry(编号,此.getPersIdentifierByNumber(编号))
.filter(entry->entry.getValue()!=null)
.map(条目->{
最后一个字符串base=entry.getKey()+“;”+str;
返回“R”.equals(entry.getValue().getType())?base+“X”:base;
})
.collect(加入(“\r\n”);//是否依赖于操作系统:System.lineSeparator()
“从流中检索值”是错误的思维方式。流封装了一个将计算为结果的操作。找到一种方法来制定操作,这样它将产生所需的结果。提示:您可能希望将字符串的实例映射到一个复合字符串,然后收集e> 通过将这些元素连接到字符串中
…
String result =
numbers.stream()
.map(number -> new SimpleEntry<String, PersIdentifier>(number, this.getPersIdentifierByNumber(number) )
.filter(entry -> entry.getValue() != null)
.map(entry ->{
final String base = entry.getKey() + ";" + str;
return "R".equals(entry.getValue().getType()) ? base + ";X" : base;
})
.collect(joining("\r\n")); // Or not OS dependent : System.lineSeparator()