我想使用lambda表达式而不是for循环生成数字列表.
所以,假设我要生成一个100以下的所有三角数列表.三角数是遵循以下公式的数字:(n*n + n)/ 2
这样做的最佳方式是什么?目前我有这个:
Stream.iterate(1, n -> n + 1).limit(100)
.map(n -> (n * n + n) / 2)
.filter(a -> a < 100)
.map(a -> a + "")
.collect(Collectors.joining(", ", "Numbers: ", "."));
Run Code Online (Sandbox Code Playgroud)
但这似乎不必要地计算量太多了.我迭代n超过1到100(因为我假设我不知道n的最大值是什么),然后我映射该列表的三角数函数然后我检查哪些数字在100以下.是否有更有效的方法这样做?另外:我可以仅使用Stream的迭代函数生成三角形数字而不是使用迭代,限制然后映射吗?
编辑:所以这里的要点是:一旦三角形数字之一超过100,如何计算traingle数字? 通常我会这样写:
ArrayList<Integer> triangles = new ArrayList<>();
for (int n=1;true;n++) {
int num = (n*n+n)/2;
if (num>100) break;
triangles.add(num);
}
Run Code Online (Sandbox Code Playgroud)
一旦三角形数超过100就停止,这是非常有效的; 如何在lambda表达式中保留这种效率?
让我们说我有以下数组:{1,2,3,4,6,7,8}放入一个Stream<Integer> s = Stream.of(1,2,3,4,6,7,8);
如何在Java lambda表达式和Stream函数中使用来计算每个元素和下一个元素之间的差异(在本例中{1,1,1,2,1,1})?这不是真正的reduce操作,因为reduce将整个列表转换为1个元素; 它也不是地图操作,因为它需要两个元素来计算差异,而不仅仅是一个.
我有一个非常大的高分辨率地图,我想在应用程序中使用它(图像大小约为 80 mb)。
我想知道以下内容:
JProgressBar向用户显示。这应该反映已加载的字节数或类似的内容。是否有任何图像加载方法可以提供此功能(如ImageIO.read())?BufferedImage对于这么大的文件,重新缩放标准方式需要很长时间。有没有什么有效的方法可以做到这一点?谢谢您的意见!
亲切的问候,
埃克托·范登布恩
ps 图像将绘制在 JPanel 的画布上。
嗨,安德鲁,非常感谢您的帮助;一切都很完美,加载速度很快。如果没有您的专业知识和解释,我会一直致力于此,因此您赢得了公平公正的赏金。
我所做的是以下内容;使用 imagemagick 我创建了多个不同分辨率的图像,并且在执行开始时我只加载最小的 res。图片。其余的加载在单独的线程中,因此执行不会停止。使用您提供给我的信息,我然后在放大或缩小时使用适当的图像。我对使用瓷砖有点怀疑,因为我需要在地图上绘制自己的图像,而我在您告诉我使用的外部罐子中找不到油漆功能,所以我最终使用了一些简单的东西;当缩放或平移时,重新缩放模式设置为快速,当您不缩放或平移时,重新缩放设置为平滑以获得像素完美的图像(就像您建议的那样),但事实证明这足够快,我不”
所以再次感谢,一切正常:)
我正在尝试创建一个Python程序,该程序可以定期轮询wifi嗅探工具airodump-ng的输出。我是在运行Raspbian和Python 3.4的RPI上执行此操作的,我已经在几个网站上查找了如何执行此操作,但是每当尝试执行此操作时,都会遇到某种僵局,程序会停顿。
我正在使用此代码:
import subprocess
airodump = subprocess.Popen(['sudo','airodump-ng','mon0'])
out,err = airodump.communicate(timeout=10)
Run Code Online (Sandbox Code Playgroud)
因此,很奇怪的是,当我在RPI上运行的IDLE中一一键入这些命令时,一切正常,但是10秒钟后出现超时错误。当不使用timeout参数时,程序只是停顿。使用额外的参数“ stdout = subprocess.PIPE”也不起作用。但是,当我进入终端并使用命令“ python3”启动python并在第一行和第二行中键入内容时,整个屏幕上都充满了airodump-ng的输出,我再也无法键入任何内容!
那么我该如何解决呢?我只想从airodump-ng获取最新输出,并且airodum-ng的输出可以在另一个线程的后台简单地更新。我只想要最新的输出。
假设我有一个字符流叫做s.是否有可能将一个单独的字符串转换为两个字符串的一元操作?
因此,如果原始Stream包含{a,b,c}并且操作将每个String转换s为s + "1",s + "2"那么我们将获得:{a1,a2,b1,b2,c1,c2}.
这是可能的(使用lambda表达式)?
在java中,数组最多只能包含Integer.MAX_VALUE项,因为它使用整数作为数组的键.当我想使用long作为索引时,最好的对象是什么?
例如,如果我想使用主筛来计算低于50亿的所有素数,我就不能使用数组,因为5000000000太大而无法存储在整数中.
19世纪1月,建立了一项新的世界纪录:迄今为止发现的最大素数之一.这个数字达到了2 ^ 74207281 - 1,拥有超过2230万位数字.我在youtube上的numberphile频道上看到,他们将这个数字打印在一本由3部分组成的书中.现在我的问题是:你如何获得一个如此大的数字的字符串表示?显然这需要相当长的时间,但最有效的方法是什么?
我在Java中知道这样做的唯一方法是使用BigIntegers,这是最好的方法吗?用其他语言怎么样?
我有以下问题.假设我有以下两个类:骑自行车山地自行车.在MountainBike的标题中我说:public class MountainBike extends Bicycle.MountainBike类添加了Bicycle中不存在的两个字段.因为我逐个添加属性(因为我正在使用数据库),所以没有构造函数,而是一个函数,它设置给定String标识符和值的属性.我知道可能没有设置所有属性并且可能为null,但这对我来说没问题.
现在问题如下.在某一点上我知道它是什么类型的自行车,它是其中一个领域.我想做的是以下内容:一旦我知道这个Bicycle对象实际上是MountainBike,我想将其转换为MountainBike:MountainBike mb = (MountainBike) bicycle但是这会导致运行时java.lang.ClassCastException:Bicycle不能施放到MountainBike.
我确信这是可能的(不使用构造函数将整个自行车作为参数).我怎样才能做到这一点?
谢谢!
埃克托
我希望创建一个函数f,它获得一个名为n的类型的参数Number.但是我还要指定n必须是Comparable(哪些是AtomicInteger和AtomicLong不是).我怎么写这个功能?
我试过这个:public static <T extends Number, Comparable<T>> void f(T n)但是这没用.我怎么解决这个问题?
假设我有一个带有成员int的类A,number它有一个getter和一个setter.
然后我创建一个A的子类并将其命名为B.现在,在BI类中希望保留该成员number,但是在这个类中我想强加number只读的限制.我怎样才能做到这一点?
对于一个编程项目,我们做了大约二十几个我们需要的课程.即使我们没有使用它,从Object 重写equals()和hashcode()函数是否是良好的编程习惯?我们认为如果我们将来需要它们可能会很好,但我们不确定.
如何将一个字符与Java中的正则表达式完全匹配?假设我想要查找只包含一次数字3的字符串,并且无论它在何处都无关紧要.
我尝试用".*3 {1}.*"来做这个,但显然这也将匹配"330",因为我指定的时间段我不关心它是什么字符.我怎样才能解决这个问题?
java ×10
lambda ×3
inheritance ×2
java-8 ×2
java-stream ×2
arrays ×1
biginteger ×1
c# ×1
class ×1
generics ×1
image ×1
large-files ×1
loading ×1
overriding ×1
primes ×1
python ×1
raspberry-pi ×1
raspbian ×1
regex ×1
rescale ×1
string ×1
subprocess ×1