从Java中的对象列表中提取对象列表
假设您有一个类从Java中的对象列表中提取对象列表,java,Java,假设您有一个类a,如下所示: public class A{ private B b; public B getB(){return b;} } 然后,您有一个a对象的列表,您希望创建另一个包含相关B对象的列表,即 List<A> listOfA=... List<B> listOfB = extractFrom(listOfA, "getB"); 然后你会: Extractor ex=...; List<B> listOfB = extract
a
,如下所示:
public class A{
private B b;
public B getB(){return b;}
}
然后,您有一个a
对象的列表,您希望创建另一个包含相关B
对象的列表,即
List<A> listOfA=...
List<B> listOfB = extractFrom(listOfA, "getB");
然后你会:
Extractor ex=...;
List<B> listOfB = extractFrom(listOfA, ex);
提取器ex=。。。;
List listOfB=提取自(listOfA,ex);
附言:标题太可怕了!请编辑标题,使其更有意义。有一个解决方案。这使用了 您需要一个
函数
,然后使用list.transform()
应用该函数:
final Function extractB=新函数()
{
@凌驾
公共B应用(最终A输入)
{
返回input.getB();
}
}
//然后:
最终列表listOfB=Lists.transform(listOfA,extractB);
请注意,Java8将具有
功能
,以及Guava“发明”的其他细节(谓词
是另一个示例)。有一个解决方案。这使用了
您需要一个函数
,然后使用list.transform()
应用该函数:
final Function extractB=新函数()
{
@凌驾
公共B应用(最终A输入)
{
返回input.getB();
}
}
//然后:
最终列表listOfB=Lists.transform(listOfA,extractB);
请注意,Java8将具有功能
,以及Guava“发明”的其他细节(谓词
是另一个示例)。这就是所谓的映射
在这里,祝你好运
此外,您还可以使用
举例来说:
Collection<B> bs = CollectionUtils.collect(collectionOfA, new Transformer() {
public Object transform(Object a) {
return ((A) a).getB();
}
});
Collection bs=CollectionUtils.collect(collectionOfA,newtransformer(){
公共对象变换(对象a){
return((A)A.getB();
}
});
这就是所谓的地图
在这里,祝你好运
此外,您还可以使用
举例来说:
Collection<B> bs = CollectionUtils.collect(collectionOfA, new Transformer() {
public Object transform(Object a) {
return ((A) a).getB();
}
});
Collection bs=CollectionUtils.collect(collectionOfA,newtransformer(){
公共对象变换(对象a){
return((A)A.getB();
}
});
AFAIK不,没有这样的库。只是作为提示:您正在Java中寻找与Python的map(function,iterable,…)函数等价的函数,如下所述:好的,我将自己实现它。通常我不喜欢重新发明油井!不,没有这样的库。只是作为一个提示:您正在寻找Java中与Python的map(function,iterable,…)函数等价的函数,如下所述:好的,我将自己实现它。通常我不喜欢重新发明油井!哦伟大的我非常惊讶地发现,还没有人实现了如此有用的实用程序!非常感谢。番石榴是金矿。使用它(tm):我知道,我使用它!但我不知道所有的实用程序。:)哦伟大的我非常惊讶地发现,还没有人实现了如此有用的实用程序!非常感谢。番石榴是金矿。使用它(tm):我知道,我使用它!但我不知道所有的实用程序。:)对不久前,我看到一个使用泛型的apache commons实现,但我没有找到链接。是的。不久前,我看到一个使用泛型的apache commons实现,但我没有找到链接。
Collection<B> bs = CollectionUtils.collect(collectionOfA, new Transformer() {
public Object transform(Object a) {
return ((A) a).getB();
}
});