Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对集合中每个bean的属性调用方法_Java - Fatal编程技术网

Java 对集合中每个bean的属性调用方法

Java 对集合中每个bean的属性调用方法,java,Java,假设我有一个属性为b的类a Class A { public int b; } 有一个集合包含类a的实例 ArrayList col 如何从col获取属性b的所有值的数组? 有没有一种方法比通过col迭代并获取每个对象的属性,然后将b的值传递给数组更优雅 LIst<Integer> propertyValues = new ArrayList<Integer>(); for (A a : col){ propertyValues.add(a.b); }

假设我有一个属性为b的类a

Class A {
    public int b;
}
有一个集合包含类a的实例 ArrayList col

如何从col获取属性b的所有值的数组? 有没有一种方法比通过col迭代并获取每个对象的属性,然后将b的值传递给数组更优雅

LIst<Integer> propertyValues = new ArrayList<Integer>();
for (A a : col){
    propertyValues.add(a.b);
}
LIst propertyvalue=new ArrayList();
对于(A:col){
房地产价值。添加(a.b);
}

可能是一种实用方法或类似的方法?

我相信JDK collections框架没有比迭代解决方案更优雅的东西。

我相信JDK collections框架没有比迭代解决方案更优雅的东西。

为什么你不认为这很优雅?几乎任何更短的代码都需要删除一些类型信息——通常您选择使用Java编程,因为您希望使用强类型和静态类型的语言


或者可能是因为它有大量的库和框架,以及大量的手册,而您继承的所有遗留代码都是用Java编写的。不管怎样。

你为什么不觉得这很优雅?几乎任何更短的代码都需要删除一些类型信息——通常您选择使用Java编程,因为您希望使用强类型和静态类型的语言


或者可能是因为它有大量的库和框架,以及大量的手册,而您继承的所有遗留代码都是用Java编写的。不管怎样。

我想你已经被上述问题困住了

也许会给你一些更容易接受的东西。请参见类,尤其是和方法

或者,您也可以这样做(它在JavaBean上提供类似XPath的导航)。您可以指定一个表达式,例如
/A/@b
,它将返回
b
的集合。如果您只做一次,这有点过分,但是如果您在集合上进行迭代和导航,这是一种非常简洁的方法


编辑:正如我在下面的评论中指出的,Scala将以更简洁的形式来完成这项工作。如果您在JVM上运行,并且做了大量类似于上述的收集工作,那么您可能需要查看它。

我想您已经被上述内容困住了

也许会给你一些更容易接受的东西。请参见类,尤其是和方法

或者,您也可以这样做(它在JavaBean上提供类似XPath的导航)。您可以指定一个表达式,例如
/A/@b
,它将返回
b
的集合。如果您只做一次,这有点过分,但是如果您在集合上进行迭代和导航,这是一种非常简洁的方法


编辑:正如我在下面的评论中指出的,Scala将以更简洁的形式来完成这项工作。如果您在JVM上运行,并且做了大量类似于上述的收集工作,那么您可能需要检查一下

List propertyList = new ArrayList();
CollectionUtils.collect(list,new Transformer() {          
    @Override
    public Object transform(Object input) {
        return ((LogMessage)input).getLogRunIds();
    }
    },propertyList);
不幸的是,转换接口不允许使用泛型,所以我必须使用显式转换


许多人都向布莱恩·阿格纽求助,希望他能给我一个深刻的见解。最后,我提出了以下解决方案

List propertyList = new ArrayList();
CollectionUtils.collect(list,new Transformer() {          
    @Override
    public Object transform(Object input) {
        return ((LogMessage)input).getLogRunIds();
    }
    },propertyList);
不幸的是,转换接口不允许使用泛型,所以我必须使用显式转换

许多thakns向Brian Agnew求助,以获得洞察力

使用:

List bees=collect(原始列表,在(A.b)中);
基本上,LamdbaJ的想法是将函数式语言中可用的所有漂亮的列表方法添加到Java中,然后甚至可以添加到整个堆栈中。绝对值得一看。

使用:

List bees=collect(原始列表,在(A.b)中);

基本上,LamdbaJ的想法是将函数式语言中可用的所有漂亮的列表方法添加到Java中,然后甚至可以添加到整个堆栈中。绝对值得一看。

不正确。Scala是类型化的,可以更简洁地完成上述工作。e、 g.col.map{a=>a.b}。这是类型化的,并返回一个“b”的集合,该片段没有类型信息-它的其余部分是什么样子的?啊,对不起,我的意思是说静态类型。总是把它们混在一起。Scala使用类型推断。因此,它从早期的用法静态地派生类型信息。上面的“col”将是一个(比如)列表[a],然后Scala编译器确定a.b是什么,并静态派生一个新的列表类型。注意,这不是动态类型。不是真的。Scala是类型化的,可以更简洁地完成上述工作。e、 g.col.map{a=>a.b}。这是类型化的,并返回一个“b”的集合,该片段没有类型信息-它的其余部分是什么样子的?啊,对不起,我的意思是说静态类型。总是把它们混在一起。Scala使用类型推断。因此,它从早期的用法静态地派生类型信息。上面的“col”将是一个(比如)列表[a],然后Scala编译器确定a.b是什么,并静态派生一个新的列表类型。注意,这不是动态类型。