我有以下代码片段:
private static final Pattern ESCAPER_PATTERN = Pattern.compile("[^a-zA-Z0-9\\p{P}\\s]*");
/**
* @param args
*/
public static void main(String[] args)
{
String unaccentedText = "Aa123 \\/*-+.=+:/;.,?u%µ£$*^¨-)ac!e§('\"e&€#²³~´][{^";
System.out.println(ESCAPER_PATTERN.matcher(unaccentedText).replaceAll(""));
}
Run Code Online (Sandbox Code Playgroud)
当我用JDK 7执行它时,我得到的输出是:
Aa123 \/*-.:/;.,?u%*-)ac!e('"e][{
当我用JDK 8执行相同的操作时,我得到的输出是:
Aa123 \/*-.:/;.,?u%*-)ac!e§('"e][{
请注意,JDK 8不会删除节标记§.
请让我知道在JDK 8的情况下使用的正则表达式以匹配部分符号 - 以及jdks之间行为差异的原因.
我有一个名为TResult的课程
public class TResult<T extends MyEntity> {
public List<T> getEntityList() {
return entityList;
}
}
Run Code Online (Sandbox Code Playgroud)
我在其他一些返回它的类中有一个静态方法
public static TResult getAllEntities(final Class clazz, RouteFilter filter ){
}
Run Code Online (Sandbox Code Playgroud)
现在,当我调用getAllEntities时,我需要将其转换为MyEntity,否则我会收到警告(未经检查的分配).我尝试更改方法签名,它只适用于
public static <T extends APIBaseEntity> TResult<T> getAllEntities(final Class clazz, RouteFilter filter) {}
Run Code Online (Sandbox Code Playgroud)
为什么我必须指出T在已经在TResult类签名中定义时在getAllEntities方法中扩展了APIBaseEntity?
TResult<APIBaseEntity> allEntities = GeneralCRUD.getAllEntities(APIAccount.class, filter);
Run Code Online (Sandbox Code Playgroud) 我需要基于单个对象创建两个对象以进一步流式处理和处理.如何使用流来实现这一目标?
伪代码可能如下所示:
stream.stream().
map(p -> new Object(p.getParam1()) <AND> new Object(p.getParam2()) ).
collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud) 我想得到字节数组流,但我知道Arrays没有方法来获取字节数组的流.
byte[] byteArr = new byte[100];
Arrays.stream(byteArr);//Compile time error
Run Code Online (Sandbox Code Playgroud)
我的问题,
注意:我知道我可以使用Byte[]而不是byte[]但不能回答我的问题.
我有一个像下面的字符串;
String textToShow = "Appplication [%ApplicationName%]: started at [%Date%][%Time%]"
当我需要在替换字符串之间[%和%]不同的价值观.
我确实喜欢下面,但它只适用于第一个,即"ApplicationName".
private String getTextVariableName(String stringToShow) {
if (stringToShow.contains("[%") && stringToShow.contains("%]")) {
String content[] = notificationText.split("%");
return content[1];
}
return null;
}
private String replaceValue(String stringToShow, String dataToReplace) {
return stringToShow.substring(0, stringToShow.indexOf("["))
+ dataToReplace
+ stringToShow.substring(stringToShow.indexOf("]") + 1, stringToShow.length());
}
public String processText(String stringToShow, String appname) {
String variableName = getTextVariableName(stringToShow);
String processedText = "Invalid";
if (variableName != null) {
switch (variableName.toLowerCase()) {
case "applicationname":
processedText = …Run Code Online (Sandbox Code Playgroud) 我有一个1到10,000的数字存储在一个数组中long.按顺序添加它们将得到50,005,000的结果.
我编写了一个Spliterator,如果一个数组的大小超过1000,它将被拆分为另一个数组.这是我的代码.但是当我运行它时,添加的结果远远超过50,005,000.有人能告诉我我的代码有什么问题吗?
非常感谢.
import java.util.Arrays;
import java.util.Optional;
import java.util.Spliterator;
import java.util.function.Consumer;
import java.util.stream.LongStream;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
public class SumSpliterator implements Spliterator<Long> {
private final long[] numbers;
private int currentPosition = 0;
public SumSpliterator(long[] numbers) {
super();
this.numbers = numbers;
}
@Override
public boolean tryAdvance(Consumer<? super Long> action) {
action.accept(numbers[currentPosition++]);
return currentPosition < numbers.length;
}
@Override
public long estimateSize() {
return numbers.length - currentPosition;
}
@Override
public int characteristics() {
return SUBSIZED;
}
@Override
public Spliterator<Long> trySplit() { …Run Code Online (Sandbox Code Playgroud) 我用servlet和JSP构建了一个web应用程序,在我的Servlet中我计算了一周的数量:
private int findWeekNumber(String myDate)
throws ParseException{
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date;
date = df.parse(myDate);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int week = cal.get(Calendar.WEEK_OF_YEAR);
System.out.println("week number is:" + week);
return week;
}
Run Code Online (Sandbox Code Playgroud)
然后我保存week到我的数据库.然后我week从我的数据库中检索.我怎样才能得到一周的开始 - 结束日期(周开始是星期一)week?让我们说weekNumber是30,我想计算20/07/2015 - 2015年7月26日.这里功能相同
我在Java 8下面有代码快照.
List<Employee> employees = DataProvider.getEmployees();
Set<Employee> set = employees.stream().filter(emp -> {
System.out.println(emp.getName());
return emp.getName().equals("Vishal");
}).collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
我只是想知道Set它在使用时使用默认的哪个实现Collectors.toSet()(参见上面的例子)?
另外,有没有办法表明java API使用特定的实现(例如HashSet)?
我在不同版本的Java中运行了以下程序.
final double[] values = new double[10000];
final long start = System.currentTimeMillis();
double sum = 0;
for (int i = 0; i < values.length; i++)
sum += Math.pow(values[i], 2);
final long elapsed = System.currentTimeMillis() - start;
System.out.println("Time elapse :: " + elapsed);
Run Code Online (Sandbox Code Playgroud)
Java 7:输出
时间流逝:: 1
Java 8:输出
时间流逝:: 7
为什么Java 8中的性能问题与7相比?
这个问题已被提出,但答案似乎不完整.以下上下文中的第一个冒号是什么意思?
import hudson.model.SCMS;
(...)
SCMS: for (SCM scm : scmTriggerItem.getSCMs()) {
(...)
Run Code Online (Sandbox Code Playgroud)
此外,冒号在Java 8中有一些新的用途.
这个问题(最初在两年前提出过)与循环java代码不同,因为它更广泛.虽然原始问题的答案没有提到使用冒号作为标签,这在"java-code-loop-code"中得到了回答,但后一个问题并没有要求在for循环中使用冒号也没有在Java 8中.
正如biziclop的答案所示,Java语法中的冒号用法容易被遗忘,而在其他两个问题中则没有提及.
java-8 ×10
java ×7
java-stream ×2
collectors ×1
date ×1
math ×1
performance ×1
regex ×1
spliterator ×1
string ×1