GVKun编程网logo

带有索引的Java 8 forEach(带有索引的并集和交集的区别)

9

本文将介绍带有索引的Java8forEach的详细情况,特别是关于带有索引的并集和交集的区别的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于c#–针

本文将介绍带有索引的Java 8 forEach的详细情况,特别是关于带有索引的并集和交集的区别的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于c# – 针对循环VS .NET foreach循环增强的Java、For循环到Java 8 Stream forEach()、Java 8 forEach与索引、Java 8 Iterable.forEach() 与 foreach 循环的知识。

本文目录一览:

带有索引的Java 8 forEach(带有索引的并集和交集的区别)

带有索引的Java 8 forEach(带有索引的并集和交集的区别)

有没有办法在 Java 8 中构建一个forEach使用索引进行迭代的方法?理想情况下,我想要这样的东西:

params.forEach((idx, e) -> query.bind(idx, e));

我现在能做的最好的事情是:

int idx = 0;params.forEach(e -> {  query.bind(idx, e);  idx++;});

答案1

小编典典

由于您正在迭代可索引的集合(列表等),因此我认为您可以只使用元素的索引进行迭代:

IntStream.range(0, params.size())  .forEach(idx ->    query.bind(      idx,      params.get(idx)    )  );

生成的代码类似于使用经典的 i++ 风格的 for 循环迭代列表,除了更容易并行化(当然,假设对 params 的并发只读访问是安全的)。

c# – 针对循环VS .NET foreach循环增强的Java

c# – 针对循环VS .NET foreach循环增强的Java

我有一个问题,我没有找到答案.
假设我们在 java或c#中有以下代码:
class Car {
   /* car stuff */
}

然后在Java中

class Truck extends Car {
   /* truck stuff */
}

和C#

class Truck : Car {
   /* truck stuff again */
}

在C#中,以下工作正常:

List<Car> carList = new List<Car>();
//add some objects to the collection
foreach(Truck t in carList)
     //do stuff with only the Truck objects in the carList collection

这是因为卡车是汽车的子类,简单来说就意味着每辆卡车也是一辆汽车.但事情是,完成了类型检查,只从carList中选择了Trucks.

如果我们在Java中尝试相同的事情:

List<Car> carList = new ArrayList<Car>();
//add some objects to the collection
for(Truck t : carList)
     //**PROBLEM**

由于增强循环中的代码,代码甚至不会编译.相反,我们必须做这样的事情来获得相同的效果:

for(Car t : carList)
   if(t instanceof Car)
      //cast t to Truck and do truck stuff with it

这与C#中没有任何问题的工作方式相同,但在Java中,您需要额外的代码.甚至语法几乎都一样!
它有没有在Java中不起作用的原因?

解决方法

The thing is though,that type checking is done and only Trucks are selected from carList.

不,不是.如果您的列表包含除Trucks之外的任何内容,则C#中将发生运行时异常.基本上,在C#中,以下内容

foreach(Truck t in carList) {
    ...
}

表现得像

foreach(object _t in carList) {
    Truck t = (Truck)_t;        // throws an InvalidCastException if _t is not a Truck
    ...
}

另一方面,Java变体是类型安全的:您必须自己进行强制转换和类型检查.

那么,为什么Java和C#的行为不同?这是我的猜测:

C#在使用泛型之前有了foreach关键字.因此,不可能有List< Car>.如果C#选择了Java的foreach方式,你必须写

foreach(object _c in myArraylistContainingOnlyCars) {
    Car c = (Car)_c;
    // do something with c
}

这很烦人.另一方面,扩展的for循环和泛型在Java中引入了相同的版本(Java 5),因此不需要自动强制转换.

For循环到Java 8 Stream forEach()

For循环到Java 8 Stream forEach()

参见英文答案 > Break or return from Java 8 stream forEach?                                    11个
我有一个for循环的列表,用于检查db中是否存在索引值.

如果任何值不存在,它会立即返回false.

public boolean exists(List<String> keys) {
     for(String key: keys) {
         boolean exists = service.existsByKey(key);
         if(!exists) return false;
      }
        return true;
}

我试图将它改为java 8 foreach,但它没有按预期工作.

keys.stream().forEach(k -> {
    boolean exists = service.existsByKey(k);
    if(!exists) return false;
});

我错过了什么吗?为什么不进入forEach()中的(!exists)staetment?

解决方法

您的forEach方法中的return语句将被忽略.

尝试使用

boolean exists = key.stream().allMatch(k -> service.existsByKey(k));

Java 8 forEach与索引

Java 8 forEach与索引

有没有一种方法可以forEach在Java 8中构建使用索引迭代的方法?理想情况下,我想要这样的东西:

params.forEach((idx,e) -> query.bind(idx,e));

我现在能做的最好的事情是:

int idx = 0;
params.forEach(e -> {
  query.bind(idx,e);
  idx++;
});

Java 8 Iterable.forEach() 与 foreach 循环

Java 8 Iterable.forEach() 与 foreach 循环

以下哪项是 Java 8 中更好的做法?

爪哇 8:

joins.forEach(join -> mIrc.join(mSession,join));

爪哇 7:

for (String join : joins) {
    mIrc.join(mSession,join);
}

我有很多 for 循环可以用 lambdas “简化”,但是使用它们真的有什么好处吗?它会提高它们的性能和可读性吗?

编辑

我还将这个问题扩展到更长的方法。我知道你不能从 lambda 返回或破坏父函数,在比较它们时也应该考虑到这一点,但是还有什么需要考虑的吗?

我们今天的关于带有索引的Java 8 forEach带有索引的并集和交集的区别的分享已经告一段落,感谢您的关注,如果您想了解更多关于c# – 针对循环VS .NET foreach循环增强的Java、For循环到Java 8 Stream forEach()、Java 8 forEach与索引、Java 8 Iterable.forEach() 与 foreach 循环的相关信息,请在本站查询。

本文标签: