收集后在java8上获取索引

时间:2018-04-25 15:41:52

标签: lambda java-8 java-stream

我有以下代码,我想使用Java 8流API进行翻译。

count = 0;
for (A a : someList) {
   if (a.get() == 1) {
     count++;
     newList.add(new X(count));
   }
}

映射时如何计算?

newList = someList.stream
.filter(a -> a.get().equals("red"))
.map(a -> new X(count))
.collect(Collectors.toList());

3 个答案:

答案 0 :(得分:5)

using VMware.Vim; public class VmCreator{ VimClient Client = new VimClientImpl(); public VmCreator(){ Client.Connect("https://hostName/sdk"); Client.Login("username", "password"); // Create new VM goes here } } 循环版本对于这种类型的逻辑更好,但是如果你真的想要使用Streams那么我会保持简单的生活并分两步而不是尝试将所有逻辑转储到单个流管道中,这可能导致代码不太可读。

for

如前所述,这绝不比int count = (int)someList.stream() .filter(a -> a.get().equals(“red”)) .count(); IntStream.rangeClosed(1, count) .mapToObj(X::new) .collect(toList()); 循环版本更好,但是这里是为了说明,有时在使用流时,最好的方法是执行多次传递,而不是尝试将所有东西都装入单个管道。

答案 1 :(得分:0)

我认为这可能有用;

let localforage = {
  keys() {
    return Promise.resolve([1, 2, 3, 4, 5])
  },
  getItem(k) {
    return Promise.resolve("found: " + k)
  }
}


async function getStuff() {
  let matches = []
  let keys = await localforage.keys()
  for (let key of keys) {
    matches.push(await localforage.getItem(key))
  }
  return matches
}

getStuff()
  .then(values => {
    console.log(values)
  })

答案 2 :(得分:-1)

a -> new X(count)替换为a -> new X(++count)++运算符会递增变量,在本例中为count,并返回旧值(如果它在变量之后)或新值(如果它在变量之前)。 / p>