根据:
https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
看起来它是可能的,但是尝试真正返回编译错误.由于我们无法使用静态方法实现接口,因此它更有意义.
public class SomeClass {
static public boolean getB(){
return false;
}
}
List<SomeClass> list = new ArrayList<>();
list.add(new SomeClass());
// below causes compile error, which I expect, however documentation indicates oherwise
list.stream().filter(SomeClass::getB).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这是编译错误:
"此行的多个标记 - 应该以静态方式访问SomeClass类型的方法getB() - Stream类型中的方法过滤器(Predicate)不适用于参数(SomeClass :: getB)"
我有不同的上行动问题stream的String的。
Stream<String> names = Arrays.asList("NAME A", "NAME B", "NAME A").stream();
names.distinct();
System.out.println(names.collect(Collectors.joining(",")));
Run Code Online (Sandbox Code Playgroud)
然后,我收到异常:
Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at com.Test.main(Test.java:62)
Run Code Online (Sandbox Code Playgroud)
但是如果我这样写这部分代码:
Stream<String> names = Arrays.asList("NAME A", "NAME B", "NAME A").stream();
final Stream<String> distinct = names.distinct();
System.out.println(distinct.collect(Collectors.joining(",")));
Run Code Online (Sandbox Code Playgroud)
一切都好。
独特的文档说:
Stream distinct() 返回由该流的不同元素(根据 Object.equals(Object))组成的流。对于有序流,不同元素的选择是稳定的(对于重复元素,保留遇到顺序中最先出现的元素。)对于无序流,没有稳定性保证。这是一个有状态的中间操作。
我做错了什么?
感谢帮助
很想知道是否有更优雅的方法试图在Java 8中找到字符串中奇数位置的数字总和.
这是我目前的职能
/**
* Explode string into char array, get sum of ASCII values at odd positions and divide by 10 to convert
* to the integer value from that character
* @param ccNumber string
* @return int sum
*/
int calculateSumOfOddDigits(final String ccNumber) {
final char[] digits = ccNumber.toCharArray();
return (digits[0] + digits[2] + digits[4] + digits[6] + digits[8] + digits[10] + digits[12] + digits[14]) / 10;
}
Run Code Online (Sandbox Code Playgroud)
还不熟悉Streams和Java 8,想想也许你可以这样做:
ccNumber.chars().mapToObj(x -> (char) x {
..add odd position …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Java列表执行敏感搜索stream().filter(...).
我的搜索功能工作正常但我没有设法实现这个工作没有区分大小写.我的函数看起来像这样:
public static List<License> searchByEverything(String keyword, String dealerid){
List<License> licenseDealerList = getLicensesByDealer(dealerid);
// org.apache.commons.lang3.StringUtils.containsIgnoreCase(keyword);
Predicate<License> licensePredicate = u -> u.name1.contains(keyword);
List<License> filteredList = licenseDealerList.stream().filter(licensePredicate).collect(Collectors.toList());
return filteredList;
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到我试图使用apache commons库但我不知道如何将它包含在我的stream().filter(...).我研究了一些不同的方法,但并没有真正理解如何将它们中的任何一个实现到我的方法中.在我的情况下,从对象值的字符串值执行搜索并返回对象非常重要.
我知道我可以使用类似的东西matchAny()而不是filter()但我不明白如何将它作为一个对象返回.
提前致谢
我有以下代码,并希望在将它们乘以我的10之后打印列表元素,但它表示不允许使用void.怎么解决?
List<Integer> integerList = Arrays.asList(10,22,30);
long muliplied = integerList.stream()
.map(e -> e*10)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud) 我想使用下面的spliterator()方法保留数组元素的顺序.
但是,当我运行这个程序时,它正在生成4 2 1 3输出.
public class Test1 {
public static void main(String[] args) {
m1().anyMatch(e -> {
System.out.println(e);
return false;
});
}
private static LongStream m1() {
return StreamSupport.longStream(Arrays.spliterator(new long[] { 1, 2, 3, 4 }), true);
}
}
Run Code Online (Sandbox Code Playgroud)
请检查并告知我这是否可能.
我在我的项目中有一个返回a的Akka层Scala Future,接收Future的部分是Java味道.
团队中的人不了解Scala,他们宁愿使用,CompletableFuture因为他们更了解Java 8 API.
有没有什么好方法可以将a变换Scala future成CompletableFuture?
显然是以非阻塞的方式.
问候.
我正在尝试执行一项任务,首先计算目录中的文件数,然后在每个文件中给出一个单词计数.我得到的文件数量还不错,但是我很难转换一些代码,我的教师从一个频率计数到更简单的字数的类中给了我.此外,我似乎无法找到正确的代码来查看每个文件来计算单词(我试图找到"通用"而不是特定的东西,但我试图使用特定的文本文件测试程序) .这是预期的输出:
Count 11 files:
word length: 1 ==> 80
word length: 2 ==> 321
word length: 3 ==> 643
Run Code Online (Sandbox Code Playgroud)
但是,这是输出的内容:
primes.txt
but
are
sometimes
sense
refrigerator
make
haiku
dont
they
funny
word length: 1 ==> {but=1, are=1, sometimes=1, sense=1, refrigerator=1, make=1, haiku=1, dont=1, they=1, funny=1}
.....
Count 11 files:
Run Code Online (Sandbox Code Playgroud)
我正在使用两个类:WordCount和FileCatch8
字数:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.AbstractMap.SimpleEntry;
import java.util.Arrays;
import java.util.Map;
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;
/**
*
* @author
*/
public class WordCount …Run Code Online (Sandbox Code Playgroud) 我试图为结果返回一个布尔值.
public boolean status(List<String> myArray) {
boolean statusOk = false;
myArray.stream().forEach(item -> {
helpFunction(item).map ( x -> {
statusOk = x.status(); // x.status() returns a boolean
if (x.status()) {
return true;
}
return false;
});
});
}
Run Code Online (Sandbox Code Playgroud)
lambda表达式中使用的抱怨变量应该是final或者有效的final.如果我指定statusOk,那么我无法在循环内分配.如何使用stream()和map()返回布尔变量?
我正在尝试编写一个 java 8 流收集器,它反映了rxjava 缓冲区运算符的功能
我有一个工作代码:
// This will gather numbers 1 to 13 and combine them in groups of
// three while preserving the order even if its a parallel stream.
final List<List<String>> triads = IntStream.range(1, 14)
.parallel()
.boxed()
.map(Object::toString)
.collect(ArrayList::new, accumulator, combiner);
System.out.println(triads.toString())
Run Code Online (Sandbox Code Playgroud)
这里的累加器是这样的:
final BiConsumer<List<List<String>>, String> accumulator = (acc, a) -> {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Accumulator|");
stringBuilder.append("Before: ").append(acc.toString());
int accumulatorSize = acc.size();
if (accumulatorSize == 0) {
List<String> newList = new ArrayList<>();
newList.add(a);
acc.add(newList); …Run Code Online (Sandbox Code Playgroud)