小编Ste*_*bel的帖子

可以使用方法引用来访问静态方法吗?

根据:

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)"

java java-8 java-stream method-reference

1
推荐指数
1
解决办法
59
查看次数

Java 8 - 字符串流不同 - IllegalStateException

我有不同的上行动问题streamString的。

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 java-8 java-stream

1
推荐指数
1
解决办法
1842
查看次数

Java 8替代字符串中奇数位置的字符总和?

很想知道是否有更优雅的方法试图在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 string java-8 java-stream

1
推荐指数
1
解决办法
1319
查看次数

使用stream()在java列表上执行大小写的敏感搜索.过滤器()

我正在尝试使用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()但我不明白如何将它作为一个对象返回.

提前致谢

java search list case-insensitive java-stream

1
推荐指数
1
解决办法
2399
查看次数

使用stream.foreach()的print元素不起作用

我有以下代码,并希望在将它们乘以我的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)

java foreach java-8 java-stream

1
推荐指数
2
解决办法
468
查看次数

如何保持流中元素的顺序

我想使用下面的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)

请检查并告知我这是否可能.

java java-8 java-stream

1
推荐指数
1
解决办法
814
查看次数

将Scala Future转换为CompletableFuture

我在我的项目中有一个返回a的Akka层Scala Future,接收Future的部分是Java味道.

团队中的人不了解Scala,他们宁愿使用,CompletableFuture因为他们更了解Java 8 API.

有没有什么好方法可以将a变换Scala futureCompletableFuture

显然是以非阻塞的方式.

问候.

java scala java-8

1
推荐指数
1
解决办法
1304
查看次数

如何计算文本文件中的单词,java 8样式

我正在尝试执行一项任务,首先计算目录中的文件数,然后在每个文件中给出一个单词计数.我得到的文件数量还不错,但是我很难转换一些代码,我的教师从一个频率计数到更简单的字数的类中给了我.此外,我似乎无法找到正确的代码来查看每个文件来计算单词(我试图找到"通用"而不是特定的东西,但我试图使用特定的文本文件测试程序) .这是预期的输出:

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)

java lambda word-count java-8 java-stream

1
推荐指数
1
解决办法
3032
查看次数

Java如何使用流映射返回布尔值

我试图为结果返回一个布尔值.

 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()返回布尔变量?

foreach lambda java-8 java-stream

1
推荐指数
2
解决办法
1万
查看次数

Java 8 流上的缓冲区运算符

我正在尝试编写一个 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)

java functional-programming java-8 rx-java java-stream

1
推荐指数
1
解决办法
3543
查看次数