使用map的多个调用的Java流检查结果 - java

关于正确使用流和映射,我有以下问题。
问题如下
我有一种方法可以从输入中读取文件并将记录插入数据库中,简而言之,它会产生一些副作用
此外,同一个函数返回某种状态,比如说一个布尔值(对此我有一定程度的自由度),表明该函数运行良好。

public static boolean execute(String filename){

    // Perform some side effects (e.g. write on DB)

    return true; // or false according to some criteria;

}

然后,我必须用两个文件来调用它,并且我必须检测至少一个文件是否运行良好(即,如果至少一个执行返回true)
我的简单解决方案是:(一种简化的命令模式版本)

public class Entrypoint {

    public static boolean myFunction(String input) {
        System.out.println("executed..." + input);
        return !input.equals("B");
    }

    public static void main(String[] args) {

        List<String> lst = Arrays.asList("A", "B", "C", "D", "E", "F");

        long callsOk = lst.stream().map(Entrypoint::myFunction)
            // .filter(x -> x.equals(true)).count();
            .filter(x -> x).count(); // Better, as suggested by Donat

        System.out.println("OK=" + callsOk);

    }
}

这项工作很好,输出为:

executed...A
executed...B
executed...C
executed...D
executed...E
executed...F
OK=5

没错,因为它应该为“B”失败(返回false)
问题是:
使用像myFunction这样的函数是否可以:

  • 的主要目的是执行副作用
  • 其返回值的目的只是为了给出已执行操作的状态(成功与否),而没有其他类型的数据
  • 在地图内以计算产量== true?
    还是我搞砸了,有更好的解决方案来解决这个问题?

    参考方案

    有两个答案。
    第一:是的,它有效。你可以这样
    第二:不要这样做!流用于功能编程,而功能编程则是要避免副作用。这是一种滥用,可能会造成混淆。考虑更复杂的情况!熟悉函数式编程的人可能不会想到这种滥用。
    这意味着:如果命令性代码具有副作用或有状态操作,则不应使用流。在这种情况下,每个循环的经典选择是更好的选择。这是一个风格问题。在许多情况下(像这样),使用流的解决方案效果很好,但是风格很差。
    另一个问题:避免流中的副作用时,可以轻松地将其更改为并行执行。
    顺便说一句,filter(x -> x.equals(true))可以简化为filter(x -> x)

    Java 8`Stream`可以并行运行,甚至不需要您吗? - java

    如我所见,在使用Java 8 Stream时,显而易见的代码无论是“对象”流还是原始流(即IntStream和朋友)都将仅使用:someStreamableResource.stream().whatever() 但是,然后,相当多的“流媒体资源”也有了.parallelStream()。读取javadoc时不清楚的是.stream()流是否始终是顺序的,以…

    JAVA 8具有任何匹配属性的对象的过滤器列表 - java

    我的要求是通过匹配任何属性的字符串来过滤对象列表。例如,假设Contact类具有三个属性:街道,城市,电话。我知道java流过滤器是如何工作的,在这里我必须将输入字符串与每个属性进行比较,如下所示:contactList.stream().filter(contact -> contact.getStreet().equals("dubai&…

    Java RegEx中的单词边界\ b - java

    我在使用\b作为Java Regex中的单词定界符时遇到困难。对于text = "/* sql statement */ INSERT INTO someTable"; Pattern.compile("(?i)\binsert\b");找不到匹配项Pattern insPtrn = Pattern.compile(&…

    Java-搜索字符串数组中的字符串 - java

    在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

    Java:正则表达式模式匹配器是否有大小限制? - java

    我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)