我一直在努力编写一个正则表达式来匹配类的导入.让班级成为
import static org.junit.Assert.*;
import org.
package.
Test;
import mypackage.mystuff;
Run Code Online (Sandbox Code Playgroud)
输出应该是[org.junit.Assert.*,org.package.Test,mypackage.mystuff].因为我不熟悉它们,所以我一直在努力使用换行符和正则表达式.这是我目前的尝试:
((?<=\bimport\s)\s*([^\s]+ )*([a-z.A-Z0-9]+.(?=;)))
Run Code Online (Sandbox Code Playgroud) 我需要按n整数序列找到子序列的最大乘积.我正在寻找一种算法,不一定表示为代码.
例:
我已经完成了算法O(n²),但现在我需要一个算法O(n).
我知道这是可能的.
怎么办O(n)呢?
我想找到一个大的(数亿个元素)IntStream的最小元素,但我只能使用结果,如果它是> N,所以我想在找到一个元素<= N时拯救我.我期望最小值在大多数情况下<= N.
IntStream.min()不会短路,所以我会被困在处理所有元素.将军IntStream.reduce也不会短路.
IntStream.noneMatch(x -> x <= N)将确保最小元素> N并且如果不是则确实短路,但实际上并没有告诉我最小值.我必须在谓词中维护状态(并添加同步或限于顺序流)以记住实际的最小值.或者,我可以增加N并再次尝试,可能在可能的N范围内进行某种二分搜索,但这听起来既缓慢又复杂.
一旦知道<= N,我怎样才能找到IntStream的最小值,短路?
我正在尝试实现一个在其实现中使用自身的另一个实例的流.该流有一些常量元素(使用IntStream.concat),因此只要连接流懒惰地创建非常量部分,这应该有效.我认为使用StreamSupport.intStream重载使用IntStream.concat的供应商("创建一个延迟连接的流")应该足够懒,只能在需要元素时创建第二个分裂器,但是甚至创建流(不评估)它)溢出堆栈.我如何懒洋洋地连接流?
我正试图将这个答案的流媒体素数筛选器移植到Java中.此筛使用其自身的另一个实例(ps = postponed_sieve()在Python代码中).如果我将最初的四个常量元素(yield 2; yield 3; yield 5; yield 7;)分解为它们自己的流,那么很容易将生成器实现为一个分裂器:
/**
* based on https://stackoverflow.com/a/10733621/3614835
*/
static class PrimeSpliterator extends Spliterators.AbstractIntSpliterator {
private static final int CHARACTERISTICS = Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL | Spliterator.ORDERED | Spliterator.SORTED;
private final Map<Integer, Supplier<IntStream>> sieve = new HashMap<>();
private final PrimitiveIterator.OfInt postponedSieve = primes().iterator();
private int p, q, c = 9;
private Supplier<IntStream> s;
PrimeSpliterator() {
super(105097564 /* according to …Run Code Online (Sandbox Code Playgroud) 考虑以下简化的测试用例:
import java.util.AbstractList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Function;
public final class Example {
static class PairList<A, B> {
public void replaceAllSecond(Function<? super B, ? extends B> secondFunction) {}
public void replaceAllSecond(BiFunction<? super A, ? super B, ? extends B> secondFunction) {}
}
static class ImmutableList<E> extends AbstractList<E> {
public static <E> ImmutableList<E> copyOf(Iterable<? extends E> elements) {return null;}
public static <E> ImmutableList<E> copyOf(Collection<? extends E> elements) {return null;}
public static <E> ImmutableList<E> copyOf(Iterator<? extends E> …Run Code Online (Sandbox Code Playgroud) 在x86/64(Intel/AMD 64位)处理器上,在字边界上对齐的变量是否比未对齐的加载操作更快?
我的一位同事辩称,未对齐的载荷很慢,应该避免.他引用了项目填充到结构中的单词边界,作为未对齐加载缓慢的证明.例:
struct A {
char a;
uint64_t b;
};
Run Code Online (Sandbox Code Playgroud)
结构A通常大小为16个字节.
另一方面,Snappy压缩器的文档指出Snappy假设"未对齐的32位和64位加载和存储很便宜".根据源代码,英特尔32和64位处理器也是如此.
那么:这里的真相是什么?如果和未对齐的载荷减少多少?在哪种情况下?
我正在创建一个简单的笔记应用程序,我想实现提醒.用户可以键入注释,点击按钮,然后使用文本在"提醒"应用中设置提醒.这是可能的,如果是的话,我该怎么做?我在EventKit和EKReminders上看到了Apple的文档,但它根本没有任何帮助.
我正在实现一个转换,从.class文件中删除未使用的元素以减小它们的大小.因为一些常量池条目将被使用,我让ASM重新计算常量池,而不是从输入中复制它.但是,转换后的.class文件有时比原始文件大,因为ASM的常量池排序需要使用ldc_w输入.class文件ldc(带有1字节索引)的指令(带有2 字节索引).我想手动对常量池进行排序,以便ldc首先引用常量.
有人可能也想要出于其他原因对常量池进行排序:例如,通过将其常量池按规范顺序排列,使一组.class文件更易于压缩,以测试使用.class文件的工具,将订单用作软件水印,或混淆不良实施的反编译器/反混淆器.
我在ASM指南中搜索了"常量",但除了常量池的常规解释之外没有任何有用的命中,并且"希望ASM隐藏与常量池相关的所有细节,因此您不必为此烦恼",在这种情况下,这是有帮助的.
如何控制ASM发出常量池条目的顺序?
在静态方法URL.setURLStreamHandlerFactory的Java文档中,有一条警告"在给定的Java虚拟机中最多可以调用一次此方法".
我简要地看了一下源代码,在URL类中有一个静态实例变量:
static URLStreamHandlerFactory factory;
Run Code Online (Sandbox Code Playgroud)
和setURLStreamHandlerFactory只是将工厂分配给这个变量:
public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac) {
synchronized (streamHandlerLock) {
if (factory != null) {
throw new Error("factory already defined");
}
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkSetFactory();
}
handlers.clear();
factory = fac;
}
}
Run Code Online (Sandbox Code Playgroud)
允许多次调用此方法将导致覆盖此工厂实例变量,但我不明白为什么Java会想要阻止此行为.
为什么Java要求每个JVM只能调用一次此方法?
我有两个名为A和B的ArrayLists,大小相等,包含一些数字.现在我要计算这样的事情:
int sum = 0;
for(int i=0; i<A.size() && i<B.size(); i++) {
sum += A.get(i)*B.get(i);
}
Run Code Online (Sandbox Code Playgroud)
如何在不使用任何额外的用户定义方法的情况下,通过使用Java 8功能(流,lambda表达式等)来实现上面的工作,计算总和?