标签: java-8

我如何在Java 8 lambda中创建此代码

可以在Lambda中执行此操作:

for (final WarehouseAddress address : warehouse.getAddresses()) {
    if (!Validator.isEmpty(address.getPositions())) {
        final Set<WarehouseAddressPosition> positions = new HashSet<WarehouseAddressPosition>(
                address.getPositions());
        if (address.getPositions().size() > positions.size()) {
            throw new FieldDuplicatedException("position error");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过没有成功:

final Set<WarehouseAddressPosition> positions = warehouse.getAddresses().stream().filter(a -> !Validator.isEmpty(a.getPositions())).collect(
            Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

因为他试图收集一套WarehouseAdress而不是一套WarehouseAdressPosition.

错误:(130,156)java:不兼容类型:推理变量T具有不兼容的边界等式约束:br.com.erp.ejb.entity.sales.WarehouseAddressPosition下限:br.com.erp.ejb.entity.sales.WarehouseAddress

在Warehouse类我有:

private List<WarehouseAddress> addresses;
Run Code Online (Sandbox Code Playgroud)

在WarehouseAddress类中,我有:

private List<WarehouseAddressPosition> positions;
Run Code Online (Sandbox Code Playgroud)

说明:此代码获取位置的原始列表并将其收集在Set中,以创建没有重复值的集合并将大小与原始列表进行比较,以检查它是否重复.由于Set不接受重复值,因此在这种情况下大小将不同.

java lambda java-8

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

String.chars()和String.codePoints()上的javadoc是否不正确?

查看String.chars()Java 8 中的方法,我们可以看到以下javadoc:

默认的IntStream字符()

返回int的流,从此序列中对char值进行零扩展.任何映射到代理代码点的char都会被解释.

如果在读取流时序列被突变,则结果是未定义的.

返回:
此序列中char值的IntStream
自:
1.8

正如我们所看到的,我们必须找到这个javadoc CharSequence,因为它没有被重新定义String.这里同样的论点也适用String.codePoints().

javadoc描述了:
如果在读取流时序列被突变,则结果是未定义的.

但是Strings(相对于CharSequence)是不可变的,因此这个String类的javadoc不正确吗?我的感觉是它在逻辑下仍然是正确的,但它也意味着chars[]in String可以被变异,这直接抵抗不变性.

java string javadoc java-8

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

Java8减少了一个流

我有以下方法:

static IntStream streamedDivisors(final int n) {
    return IntStream.range(2, n).parallel().filter(input -> n % input == 0);
}

static int streamedPhi(final int n) {
    return streamedDivisors(n).reduce(0, x -> x * x);
}
Run Code Online (Sandbox Code Playgroud)

我在streamedPhi中遇到编译错误,表明我的lambda表达式中有不兼容的参数类型.有人能帮助我理解这个吗?我基本上试图取一个给定数字n的除数,并在我定义的某个函数上聚合一个数字(在这种情况下,对数字进行平方).

java lambda java-8 java-stream

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

Java等效于C#中的位置

whereC#中的扩展方法的Java 8等价方法是什么?

如何Hashtable使用lambda表达式过滤Java 8中的元素

java lambda java-8

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

Java 8 CFG中无法访问的规则?

也许是一个相当深入的问题,但是有人知道为什么会这样

Java语言规范 - Java SE 8 Edition(2014-03-03)

它根据生产规则和终端定义了Java 8的正式无上下文语法,并不是所有已定义的规则都可以访问?

规范描述了许多规则,如

IfThenStatement:
if(Expression)Statement

要么

AssertStatement:
断言表达式;
断言表达式:表达;

这一切都很有意义.

但奇怪的是,一些定义的规则是其他人无法达到的,例如重要的规则

类型:
PrimitiveType
ReferenceType

总的来说,我计算了以下两条规则:其他人无法访问的规则:

  1. 包裹名字
  2. 类型

如何定义具有无法访问规则的完整Java 8 CFG?

java parsing context-free-grammar formal-languages java-8

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

JDK8中没有java.nio.file

我安装了JDK 8,编译器不会导入nio.file.我正在使用Windows 7 64的cmd.exe.互联网上的每个地方都有这个问题,因为他们有JDK 6或更早版本,我有JDK 8所以我不知道发生了什么.import java.nio.*;工作正常但它仍然没有我需要的类.我一直在坚持下去

cannot find symbol
import java.nio.file;
               ^
Run Code Online (Sandbox Code Playgroud)

编辑:正如我所说,我不使用IDE,只需记事本+ cmd.exe.javac -version结果javac 1.8.0.

java java-8 java.nio.file

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

Java:泛型和未经检查 - 为什么?

我使用的是JDK8,javac 1.8.0_05 我有这样的界面:

public interface NumberHolder<N extends Number> {        
    Optional<String> getNumberName();
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,NumericHolder方法getNumberName()返回的所有子类型Optional<String>.
但是......当我尝试访问它时:

NumberHolder numberHolder = null;
Optional<String> optional = numberHolder.getNumberName(); // warning is here
Run Code Online (Sandbox Code Playgroud)

编译器说:

warning: [unchecked] unchecked conversion 
        Optional<String> optional = numberHolder.getNumberName();
Run Code Online (Sandbox Code Playgroud)

getNumberName()总是Optional<String>这样,为什么提出这个警告呢?
有人可以解释一下吗?

java generics syntax-error java-8

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

JavaFX 8 SceneBuilder LineChart数据类型

看起来当我在SceneBuilder中创建一个LineChart时,它默认为"String".那就是:LineChart<String, String>.

当我在代码中加载它然后尝试添加一些我得到的数据:

Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)

如果我在代码中创建图表,它工作正常:

val chart = new LineChart[Number, Number]( new NumberAxis(), new NumberAxis())
Run Code Online (Sandbox Code Playgroud)

我没有在SceneBuilder中看到任何允许我选择"数字"作为图表数据类型的选项.

我在这里错过了什么?

java javafx java-8 scenebuilder

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

使用streams和java8创建对象列表的字段值的连接字符串

我有一个类似的课程

public class Person {

  public Person(String firstName) {...}

  public String getFirstname() {...}

  // ... some other fields

}
Run Code Online (Sandbox Code Playgroud)

以及这些类的对象列表:

List<Person > objList = new ArrayList<>();
objList.add(new Person("Peter"));
objList.add(new Person("James"));
objList.add(new Person("Bart"));
Run Code Online (Sandbox Code Playgroud)

现在我需要一个以逗号分隔的列表,列出这个对象列表的第一个名字,比如"Peter,James,Bart".

我怎么能用lambdas和Java 8流做到这一点?TIA!

java lambda java-8

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

java.lang.IllegalStateException:Iterator已经获得

我修改了这段代码,在一个目录中完成了几个任务:

public class HDDSerialNumber
{

    public void getHDDSerialNumber() throws IOException
    {
        try (DirectoryStream<Path> ds = Files.newDirectoryStream(Paths.get("/sys/block"), "sd*"))
        {
            // Get HDD Model
            StreamSupport.stream(ds.spliterator(), false)
                .map(p -> p.resolve("device/model")).flatMap(wrap(Files::lines))
                .forEach(System.out::println);

            // Get HDD Vendor
            StreamSupport.stream(ds.spliterator(), false)
                .map(p -> p.resolve("device/vendor")).flatMap(wrap(Files::lines))
                .forEach(System.out::println);

            // Get HDD Vendor
            StreamSupport.stream(ds.spliterator(), false)
                .map(p -> p.resolve("device/state")).flatMap(wrap(Files::lines))
                .forEach(System.out::println);
        }
    }

    static <T, R> Function<T, R> wrap(IOFunction<T, R> f)
    {
        return t ->
        {
            try
            {
                return f.apply(t);
            }
            catch (IOException ex)
            {
                throw new UncheckedIOException(ex);
            }
        };
    }

    interface IOFunction<T, …
Run Code Online (Sandbox Code Playgroud)

java java-8

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