标签: java-8

java 8中的Pattern.matcher与sectionsign§不匹配§

我有以下代码片段:

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之间行为差异的原因.

regex java-8

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

Java泛型调用返回<T extends>对象的方法

我有一个名为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)

java java-8

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

Stream从一个创建两个对象并进一步处理

我需要基于单个对象创建两个对象以进一步流式处理和处理.如何使用流来实现这一目标?

伪代码可能如下所示:

stream.stream().
    map(p -> new Object(p.getParam1()) <AND> new Object(p.getParam2()) ).
    collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

没有方法来获取字节数组的流

我想得到字节数组流,但我知道Arrays没有方法来获取字节数组的流.

byte[] byteArr = new byte[100];
Arrays.stream(byteArr);//Compile time error
Run Code Online (Sandbox Code Playgroud)

我的问题,

  • 为什么不支持此功能?
  • 如何获取字节数组的流?

注意:我知道我可以使用Byte[]而不是byte[]但不能回答我的问题.

java java-8

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

用不同的值替换长字符串的部分

我有一个像下面的字符串;

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)

java string java-8

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

Spliterator Java 8

我有一个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)

java-8 spliterator

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

从周数中查找一周的开始日期

我用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 date java-8

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

什么是Java 8 Stream API中的收集器的默认Set/List实现?

我在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-8 java-stream collectors

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

Java 8中的Math.pow性能与Java 7相比

我在不同版本的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相比?

java math performance java-8

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

结肠在Java中意味着什么(第2部分)?

这个问题已被提出,但答案似乎不完整.以下上下文中的第一个冒号是什么意思?

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 java-8

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

标签 统计

java-8 ×10

java ×7

java-stream ×2

collectors ×1

date ×1

math ×1

performance ×1

regex ×1

spliterator ×1

string ×1