Tag: java 8

在JavaFX图表中添加一行

我在JavaFX中的定义位置添加一行有问题。 该行必须是一个常量行,如下所示: 如何在JavaFX图表中添加值标记? 我的问题是,我的布局定义有点复杂。 看一看: 重要的部分是顶部的那个。 我希望在y = 60行上有这条线。 RadioBoxes的左侧部分是VBox。 带有(Scatter-)图表的部分是StackPane(因为我希望它填充宽度的其余部分)。 StackPane内部是图表和组。 该集团唯一的子女就是这条线。 我认为问题是,StackPane将集团的中心放在图表上方。 但我无法得到布局的组合,其中1.拉伸图表2.将线条设置在图表3上方。不会使线条居中 我尝试了很多组合,但我无法按照我想要的方式得到它。 有人有想法吗?!

如何从float 获取流

当我注意到一些奇怪的东西时,我正在学习如何使用java 8流。 Arrays.stream()有浮点数组的所有方法: Arrays.stream(int[]) : IntStream Arrays.stream(long[]) : LongStream Arrays.stream(double[]) : DoubleStream 类似地,有int,double等的Stream实现,但不是浮点数: IntStream LongStream DoubleStream 这有什么理由吗? 使用浮点流的推荐方法是什么?

Java 8:方法引用Bound Receiver和UnBound Receiver之间的区别

我试图在我的代码中使用Java 8方法引用。 有四种类型的方法参考可用。 静态方法参考。 实例方法(绑定接收器)。 实例方法(UnBound接收器)。 构造函数参考。 使用Static method reference和Constructor reference我没有问题,但Instance Method (Bound receiver)和Instance Method (UnBound receiver)确实让我很困惑。 在Bound接收器中,我们使用Object引用变量来调用方法,如: objectRef::Instance Method 在UnBound接收器中,我们使用类名来调用方法,如: ClassName::Instance Method. 我有以下问题: 实例方法的不同类型的方法引用需要什么? Bound和Unbound接收方法引用之间有什么区别? 我们应该在哪里使用Bound接收器?我们应该在哪里使用Unbound接收器? 我还从Java 8语言特性书中找到了Bound和Unbound接收器的解释,但仍然与实际概念混淆。

收集器的组合器function是否可以用于顺序流?

示例程序: public final class CollectorTest { private CollectorTest() { } private static BinaryOperator nope() { return (t, u) -> { throw new UnsupportedOperationException(“nope”); }; } public static void main(final String… args) { final Collector<Integer, ?, List> c = Collector.of(ArrayList::new, List::add, nope()); IntStream.range(0, 10_000_000).boxed().collect(c); } } 因此,为了简化这里的问题,没有最终的转换,因此生成的代码非常简单。 现在, IntStream.range()生成一个顺序流。 我只是将结果Integer成Integer ,然后我设计的Collector将它们收集到List 。 很简单。 无论我运行多少次这个示例程序, UnsupportedOperationException不会命中,这意味着永远不会调用我的虚拟组合器。 我有点期待这个,但后来我已经误解了流,我不得不问这个问题…… […]

如何使用Java 8流制作笛卡尔积?

我有以下集合类型: Map<String, Collection> map; 我想从每个Key的集合中的单个值创建每个map.size()唯一组合。 例如,假设地图如下所示: A, {a1, a2, a3, …, an} B, {b1, b2, b3, …, bn} C, {c1, c2, c3, …, cn} 我想得到的结果是List<Set>结果,看起来类似于(排序并不重要,它只需要是一个由所有可能组合组成的’完整’结果): {a1, b1, c1}, {a1, b1, c2}, {a1, b1, c3}, {a1, b2, c1}, {a1, b2, c2}, {a1, b2, c3}, … {a2, b1, c1}, {a2, b1, c2}, … {a3, b1, c1}, {a3, […]

Stream.forEach是否遵循顺序流的遭遇顺序?

Stream.forEach的Javadoc说(强调我的): 此操作的行为明确是不确定的。 对于并行流管道,此操作不保证遵守流的遭遇顺序 ,因为这样做会牺牲并行性的好处。 对于任何给定元素,可以在任何时间以及库选择的任何线程中执行该动作。 如果操作访问共享状态,则它负责提供所需的同步。 Java 9 Early Access Javadoc中提供了相同的文本。 第一句(“明确不确定”)表明(但没有明确说明)此方法不会保留遭遇顺序。 但下一句明确表示顺序未被保留的句子以“For parallel stream pipeline”为条件,如果不管并行性如何应用该句子,则不需要该条件。 这让我不确定forEach是否会保留顺序流的顺序。 这个答案指出了流库实现调用.sequential().forEach(downstream) 。 这表明forEach旨在保留顺序流的顺序,但也可能只是库中的错误。 我通过使用forEachOrdered安全地回避了我自己的代码中的这种歧义,但今天我发现NetBeans IDE的“使用function操作”编辑器提示将转换 for (Foo foo : collection) foo.bar(); 成 collection.stream().forEach((foo) -> { foo.bar(); }); 如果forEach不保留遭遇顺序,则会引入错误。 在我报告针对NetBeans的错误之前,我想知道库实际上保证了什么,并由源备份。 我正在寻找权威人士的答案 。 这可能是图书馆实施中的明确评论,关于Java开发邮件列表的讨论(谷歌没有找到任何东西,但我可能不知道这些神奇的词汇),或者是图书馆设计师的声明(其中我知道两个, Brian Goetz和Stuart Marks ,积极参与Stack Overflow)。 (请不要回答“只是使用forEachOrdered” – 我已经做了,但我想知道代码是否错误。)

使用Java8计算int出现次数

有没有更好的方法来计算Java8的出现次数 int[] monthCounter = new int[12]; persons.stream().forEach(person -> monthCounter[person.getBirthday().getMonthValue() – 1]++);

LambdaMetafactory的Java访问bean方法

我的问题与该线程中显式使用LambdaMetafactory密切相关,提供了一些非常好的示例来使用LambdaMetafactory访问类的静态方法; 但是,我想知道访问现有bean实例的非静态字段的等效代码是什么。 似乎很难找到一个例子,我执行的每一次尝试都以非工作代码结束。 这是bean代码: class SimpleBean { private Object obj= “myCustomObject”; private static Object STATIC_OBJECT = “myCustomStaticObject”; public Object getObj() { return obj; } public void setObj(final Object obj) { this.obj = obj; } public static Object getStaticObj() { return STATIC_OBJECT; } public static void setStaticObj(final Object obj) { STATIC_OBJECT = obj; } } 这是一个成功访问静态方法“getStaticObj()”的工作unit […]

为什么我不能将lambda赋给Object?

我试图将lambda分配给Object类型: Object f = ()->{}; 它给我错误说: The target type of this expression must be a functional interface 为什么会这样,以及如何做到这一点?

流和懒惰的评估

我正在阅读流抽象的java 8 API ,但我不太理解这句话: 中间操作返回一个新流。 他们总是懒惰; 执行诸如filter()之类的中间操作实际上并不执行任何过滤,而是创建一个新流,当遍历时,该流包含与给定谓词匹配的初始流的元素。 在执行管道的终端操作之前,不会开始遍历管道源。 当过滤操作创建新流时,该流是否包含过滤后的元素? 似乎理解流仅在遍历时才包含元素,即具有终端操作。 但是,包含过滤流的内容是什么? 我很困惑!!!