标签: java-8

Project Coin的集合增强功能将在JDK8中进行吗?

最初Coin项目增强了对集合的支持,例如list[3]代替list.get(3)map["hello"] = 27代替的map.put("hello", 27),但他们不是在JDK7.他们会在jdk8吗?对于是或否,我找不到确定的答案.

java jsr java-7 java-8

21
推荐指数
1
解决办法
4276
查看次数

如何在java8中更改字符串列表中的项目

我想要更改所有项目list.
这样做的正确方法是什么java8

public class TestIt {

public static void main(String[] args) {
    ArrayList<String> l = new ArrayList<>();
    l.add("AB");
    l.add("A");
    l.add("AA");
    l.forEach(x -> x = "b" + x);
    System.out.println(l);
}

}
Run Code Online (Sandbox Code Playgroud)

java list java-8

21
推荐指数
2
解决办法
2万
查看次数

Java lambda表达式,转换和比较器

我正在查看Map界面的Java源代码,并遇到了这一小段代码:

    /**
     * Returns a comparator that compares {@link Map.Entry} in natural order on value.
     *
     * <p>The returned comparator is serializable and throws {@link
     * NullPointerException} when comparing an entry with null values.
     *
     * @param <K> the type of the map keys
     * @param <V> the {@link Comparable} type of the map values
     * @return a comparator that compares {@link Map.Entry} in natural order on value.
     * @see Comparable
     * @since 1.8
     */
    public static <K, …
Run Code Online (Sandbox Code Playgroud)

java lambda casting java-8

21
推荐指数
3
解决办法
8949
查看次数

如何使用Files.walk()...根据条件获取文件图表?

我有以下目录结构:

/path/to/stuff/org/foo/bar/
/path/to/stuff/org/foo/bar/1.2.3/
/path/to/stuff/org/foo/bar/1.2.3/myfile.ext
/path/to/stuff/org/foo/bar/1.2.4/
/path/to/stuff/org/foo/bar/1.2.4/myfile.ext
/path/to/stuff/org/foo/bar/blah/
/path/to/stuff/org/foo/bar/blah/2.1/
/path/to/stuff/org/foo/bar/blah/2.1/myfile.ext
/path/to/stuff/org/foo/bar/blah/2.2/
/path/to/stuff/org/foo/bar/blah/2.2/myfile.ext
Run Code Online (Sandbox Code Playgroud)

我想得到以下输出:

/path/to/stuff/org/foo/bar/
/path/to/stuff/org/foo/bar/blah/
Run Code Online (Sandbox Code Playgroud)

我有以下代码(下面),这是低效的,因为它打印出来:

/path/to/stuff/org/foo/bar/
/path/to/stuff/org/foo/bar/
/path/to/stuff/org/foo/bar/blah/
/path/to/stuff/org/foo/bar/blah/
Run Code Online (Sandbox Code Playgroud)

这是Java代码:

public class LocatorTest
{

    @Test
    public void testLocateDirectories()
            throws IOException
    {
        long startTime = System.currentTimeMillis();

        Files.walk(Paths.get("/path/to/stuff/"))
             .filter(Files::isDirectory)
             .forEach(Foo::printIfArtifactVersionDirectory);

        long endTime = System.currentTimeMillis();

        System.out.println("Executed in " + (endTime - startTime) + " ms.");
    }

    static class Foo
    {

        static void printIfArtifactVersionDirectory(Path path)
        {
            File f = path.toAbsolutePath().toFile();
            List<String> filePaths = Arrays.asList(f.list(new MyExtFilenameFilter()));

            if (!filePaths.isEmpty())
            {
                System.out.println(path.getParent());
            }
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

过滤器: …

java java-8

21
推荐指数
1
解决办法
4万
查看次数

CompletableFuture:等待第一个正常返回?

我有一些CompletableFutures,我想并行运行它们,等待正常返回的第一个.

我知道我可以CompletableFuture.anyOf用来等待第一次返回,但这将正常异常返回.我想忽略异常.

List<CompletableFuture<?>> futures = names.stream().map(
  (String name) ->
    CompletableFuture.supplyAsync(
      () ->
        // this calling may throw exceptions.
        new Task(name).run()
    )
).collect(Collectors.toList());
//FIXME Can not ignore exceptionally returned takes.
Future any = CompletableFuture.anyOf(futures.toArray(new CompletableFuture<?>[]{}));
try {
    logger.info(any.get().toString());
} catch (Exception e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

java java-8 completable-future

21
推荐指数
2
解决办法
6736
查看次数

为什么不使用自定义比较器从 TreeSet 中删除更大的项目集?

同时使用 Java 8 和 Java 11,请考虑以下TreeSet带有String::compareToIgnoreCase比较器的内容:

final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase);
languages.add("java");
languages.add("c++");
languages.add("python");

System.out.println(languages);                 // [c++, java, python]
Run Code Online (Sandbox Code Playgroud)

当我尝试删除 中存在的确切元素时TreeSet,它起作用了:所有指定的元素都被删除:

languages.removeAll(Arrays.asList("PYTHON", "C++"));

System.out.println(languages);                 // [java]
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试删除而不是 中存在的更多TreeSet,则调用根本不会删除任何内容(这不是后续调用,而是调用而不是上面的代码段):

languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP"));

System.out.println(languages);                 // [c++, java, python]
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?为什么会这样?

编辑:String::compareToIgnoreCase是一个有效的比较器:

(l, r) -> l.compareToIgnoreCase(r)
Run Code Online (Sandbox Code Playgroud)

java comparator treeset java-8 java-11

21
推荐指数
1
解决办法
749
查看次数

Java默认方法比相同的代码慢,但在抽象类中

我有一个界面PackedObject:

public interface PackedObject {
    int get();
    int sum();
    void setIndex(int index);
    default int defaultSum() {
        return get();
    }
}
Run Code Online (Sandbox Code Playgroud)

抽象类AbstractPackedObject:

public abstract class AbstractPackedObject implements PackedObject {
    protected int index = 0;
    protected int[] buffer;

    public void setIndex(int index) {
        this.index = index;
    }

    public void setBuffer(int[] buffer) {
        this.buffer = buffer;
    }

    @Override
    public int sum(){
        return get();
    }
}
Run Code Online (Sandbox Code Playgroud)

并具体实施WrappedPackedObject:

public class WrappedPackedObject extends AbstractPackedObject implements PackedObject {

    public WrappedPackedObject(int[] buffer) …
Run Code Online (Sandbox Code Playgroud)

java performance java-8

20
推荐指数
1
解决办法
908
查看次数

Hibernate @Temporal for Java 8 java.time.Instant

我使用Hibernate并尝试执行以下操作:

@Temporal(TemporalType.DATE)
@Column(name = "BIRTHDAY")
private Instant birthday;
Run Code Online (Sandbox Code Playgroud)

但有这个例外:

Caused by: org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property:
Run Code Online (Sandbox Code Playgroud)

正如我所建议的那样尝试使用

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>${hibernate.ver}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但有相同的例外.我应该做一些额外的步骤或如何解决这种情况?

hibernate jpa java-8

20
推荐指数
2
解决办法
2万
查看次数

在java.time.Period类中,withDays(),withMonths(),withYears()的目的是什么

我注意到java.time.Period类包含一些与可用的静态工厂方法相同的实例方法.

  • .withDays() 行为与...相同 Period.ofDays()
  • .withMonths() 行为与...相同 Period.ofMonths()
  • .withYears() 行为与...相同 Period.ofYears()

这些实例方法令人困惑,因为它们创建了一个新的Period并返回它们,但没有考虑它们被调用的Period的状态.

Period p = Period.ofWeeks(3);
p = p.withDays(2);
Run Code Online (Sandbox Code Playgroud)

似乎合乎逻辑的是,这将返回3周,2天的时间段,但它只返回2天的时间段.这就像我打电话一样Period.ofDays(2).

此外,还有五种其他静态工厂方法,没有类似的实例方法.

那么,这三种实例方法是否存在?如果是这样,用例是什么?

java java-8 java-time

20
推荐指数
1
解决办法
837
查看次数

考虑在过滤流创建后添加的列表元素

给出以下代码:

List<String> strList = new ArrayList<>(Arrays.asList("Java","Python","Php"));

Stream<String> jFilter = strList.stream().filter(str -> str.startsWith("J"));

strList.add("JavaScript"); // element added after filter creation
strList.add("JQuery"); // element added after filter creation

System.out.println(Arrays.toString(jFilter.toArray())); 
Run Code Online (Sandbox Code Playgroud)

哪个输出:

[Java, JavaScript, JQuery]
Run Code Online (Sandbox Code Playgroud)

即使在创建过滤后的流后添加了过滤结果,为什么会出现JavaScriptJQuery显示在过滤结果中?

java java-8 java-stream

20
推荐指数
2
解决办法
530
查看次数