gpt4 book ai didi

Java - 非匿名比较器模拟从集合中选择元素

转载 作者:行者123 更新时间:2023-12-01 11:42:51 24 4
gpt4 key购买 nike

我有兴趣问题。有一个抽象类,它将由子类扩展。抽象类中有以下方法:

public abstract class MyAbstractClass {
protected List<MyObject> findSpecificObjects(List<MyObject> objectsToSelectFrom, List<MyObject> objectsToCompare) {
List<MyObject> selected = new ArrayList<MyObject>();
//there I need to select elements from objectsToSelectFrom
//using MyComparatorAnalogue with objectsToCompare
return selected;
}

protected class MyComparatorAnalogue implements ??? {
/*this comparator analogue should have an access to objectsToCompare
it must select elements from objectsToSelectFrom with property myProperty=someValue, where someValue - value that no one element from objectsToCompare have in the same property myProperty
*/
}
}

为什么我应该用这种奇怪的方式来做——因为我需要能够在子类中重写 MyComparator。有什么办法可以做我想做的事吗?我查看了 Apache Commons Collections,但没有找到任何可以在这种情况下帮助我的内容。

例如:

objectsToSelectFrom = {[key=Michael,value=23],[key=Luis,value=44],[key=Andrew,value=26]}
objectsToCompare = {[key=John,value=23],[key=Luis,value=44]}

假设 myPropertyvalue 属性 MyComparatorAnalogue 应选择 [key=Andrew,value=26]元素。

希望我能以通俗易懂的方式描述它。谢谢。

最佳答案

使用 Java 8 和流,你可以做这样的事情。

    List<MyObject> l = new ArrayList<>();
l.add(new MyObject("foo", "FOO"));
l.add(new MyObject("bar", "BAR"));
l.add(new MyObject("baz", "BAZ"));

List<MyObject> whitelist = new ArrayList<>();
whitelist.add(new MyObject("other bar", "BAR"));

Predicate<? super MyObject> inWhitelist = (MyObject o) -> {
return whitelist.stream().anyMatch((p) ->
o.getValue().equals(p.getValue()));
};

List<MyObject> filtered =
l.stream().filter(inWhitelist).collect(Collectors.toList());

现在 filtered 包含 MyObject("bar", "BAR") ,它与 MyObject( “其他酒吧”,“酒吧”)

关于Java - 非匿名比较器模拟从集合中选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29385088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com