有没有一种简洁的方法来迭代流,同时有权访问流中的索引?
String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"};
List<String> nameList;
Stream<Integer> indices = intRange(1, names.length).boxed();
nameList = zip(indices, stream(names), SimpleEntry::new)
.filter(e -> e.getValue().length() <= e.getKey())
.map(Entry::getValue)
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
与那里给出的LINQ示例相比,这似乎相当令人失望
string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();
Run Code Online (Sandbox Code Playgroud)
有更简洁的方法吗?
此外,看起来拉链已移动或被移除......
我正在尝试使用Java 8流和lambda表达式进行顺序搜索.这是我的代码
List<Integer> list = Arrays.asList(10, 6, 16, 46, 5, 16, 7);
int search = 16;
list.stream().filter(p -> p == search).forEachOrdered(e -> System.out.println(list.indexOf(e)));
Run Code Online (Sandbox Code Playgroud)
Output: 2
2
Run Code Online (Sandbox Code Playgroud)
我知道list.indexOf(e)总是打印第一次出现的索引.如何打印所有索引?
有谁知道如何分别以Java 8方式实现以下片段代码,是否有任何流方法可检测forEach中的第一个元素?
List<String> myList = new ArrayList<String>();
myList.add("A");
myList.add("B");
int i = 0;
for (final String value : myList) {
if (i == 0) {
System.out.println("Hey that's the first element");
}
System.out.println(value);
i++;
}
Run Code Online (Sandbox Code Playgroud)
Java8:
myList.stream().forEach(value -> {
// TODO: How to do something special for first element?
System.out.println(value);
});
Run Code Online (Sandbox Code Playgroud)
此外,假设目标是以下(控制台输出):
A Something special
B
C
D
E
F
Run Code Online (Sandbox Code Playgroud) 我最近开始检查新的Java 8功能.
我遇到过这个forEach迭代器 - 迭代了Collection.
我们假设我有一个值为{1,2,3,4,5} ArrayList的类型<Integer>
list.forEach(i -> System.out.println(i));
Run Code Online (Sandbox Code Playgroud)
此语句遍历列表并在其中打印值.
我想知道我将如何指定我希望它仅迭代某些特定值.
就像,我希望它从第二个值开始并迭代到第二个值.或类似的东西 - 或替代元素.
我该怎么做?