迭代 Java 集合和对元素进行一些转换的有效方法
Efficient way to iterative Java Collection and doing some transformation on element
我想知道是否有一些有效的方法来迭代对象的 java 集合并进行一些转换。这是我经常看到的一个例子:
public class MyObject {
int data;
public void run() {
doTransform();
}
.....
}
public class Main {
public static void main(){
Set<MyObject> objs=..
for(MyObject obj: objs){
if(obj.getData() && other conditions ){
obj.run();
}
}
//The iterator are also frequently used here ..
}
}
就个人而言,我不喜欢 main 方法中显示的这种方式,因为它需要更多的键入代码并且代码不是那么干净......我更喜欢C++中使用的方式(只有一行代码)。上述示例为:
for_each(obj.begin(), obj.end(), a fun object);
在Java 8中,你可以做到:
objs.stream()
.filter(o -> o.hasData() && other conditions)
.forEach(MyObject::run);
很难想象比这更简洁的东西(至少在仍然可读的情况下!以下是它更深入的功能:
- 第一行为您的
Set<MyObject>
创建一个Stream<MyObject>
- 第二行它将其转换为仅允许元素
o
的流,以便o.hasData() && other conditions
.- 这与循环中的
if
相对应。
- 这与循环中的
- 最后,第三行调用
run
方法。- (
MyObject::run
只是o -> o.run()
的简写,其中o
是MyObject
类型。
- (
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 将方法转换为调用该方法的成员函子对象会导致崩溃
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 从长整整转换为uint64_t的推荐方法是什么?
- 将传入的网络"char*"数据转换为"uint8_t"并返回的安全方法是什么?
- 有没有将变量名称转换为双指针的简短方法?
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 从基类实例调用派生类方法而不进行强制转换
- C++ 将静态方法转换为简单方法
- 将 malloc 转换为新的正确方法
- C++方法转换为 C#
- C ++基础私有方法在将自身转换为派生类后可以访问吗?
- 通过构造函数方法输出的类到类类型转换是 5500 为什么不是 5555
- 为什么这种转换方法不编译?
- 两个具有转换方法的类
- 传递和强制转换方法指针
- CRTP 向下转换方法调用
- Qt4:QGraphicsScene/View和自定义转换方法
- c++中这两种类型转换方法的区别是什么?