如何使用流重用具有几乎相同实现的 Java 方法

我有一系列 Java 方法,除了下面实现的不同类(如Class1Number、Class2Number、Class3Number等)外,它们看起来都一样。有没有办法编写一个将类作为参数的方法?


Set<String> trimClass1NumberList(Set<String> criteria){

    Set<String> validData = new HashSet<>();

    Set<Class1Number> numberList = criteria.stream().map(String::trim).map(Class1Number::valueOf)

        .filter(Class1Number::isWellformed).collect(Collectors.toSet());

    for (Class1Number num : numberList) {

        // Do somehing with validData

    }

    return validData;

}


Set<String> trimClass2NumberList(Set<String> criteria){

    Set<String> validData = new HashSet<>();

    Set<Class2Number> numberList = criteria.stream().map(String::trim).map(Class2Number::valueOf)

        .filter(Class2Number::isWellformed).collect(Collectors.toSet());

    for (Class2Number num : numberList) {

        // Do somehing with validData

    }

    return validData;

}


慕村225694
浏览 93回答 3
3回答

扬帆大鱼

你可以做类似的事情<T> Set<String> trimNumberList(Set<String> criteria, Function<String, T> valueOf, Predicate<T> isWellFormed){&nbsp; &nbsp; Set<String> validData = new HashSet<>();&nbsp; &nbsp; Set<T> numberList = criteria.stream().map(String::trim).map(valueOf)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(isWellFormed).collect(Collectors.toSet());&nbsp; &nbsp; for (T num : numberList) {&nbsp; &nbsp; &nbsp; &nbsp; // Do somehing with validData&nbsp; &nbsp; }&nbsp; &nbsp; return validData;}然后像这样称呼它trimNumberList(criteria, Class1Number::valueOf, Class1Number::isWellFormed);trimNumberList(criteria, Class2Number::valueOf, Class2Number::isWellFormed);但是,在 for 循环中对您的实例执行任何特殊操作都需要一个通用的基本类型。

慕村9548890

您可以为 Class1Number、Class2Number、Class3Number 创建一个通用抽象超类或通用接口,并在您的方法中使用它而不是真正的子类。

守着星空守着你

您的班级似乎具有相同的行为。如果您在它们上使用的方法也相同,我的建议是使用 Java 继承,如下所述class Super {&nbsp; &nbsp;.....&nbsp; &nbsp;.....}class Sub extends Super {&nbsp; &nbsp;.....&nbsp; &nbsp;.....}在你的情况下class Class0Number {theMethodYouUse(){.....};}class Class1Number extends Class0Number {// and maybe for different behaviour inside the for each block you can override the method and use always the same by overriding it@OverridetheMehodYouUse(){......};}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java