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();) {

我不熟悉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();) {
        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()