标签: java-8

java 8中的默认方法

问题2:以下界面有什么问题?

public interface SomethingIsWrong {
    void aMethod(int aValue) {
        System.out.println("Hi Mom");
    }
}
Run Code Online (Sandbox Code Playgroud)

答案2:它有一个方法实现.只有默认和静态方法有实现(我认为这是错误的,因为界面不能有身体的方法,因为默认它的方法是抽象的).

问题3:修复问题2中的界面.

答案3:

public interface SomethingIsWrong {
    void aMethod(int aValue);
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以将aMethod定义为默认方法:

public interface SomethingIsWrong {
    default void aMethod(int aValue) {
        System.out.println("Hi Mom");
    }
}
Run Code Online (Sandbox Code Playgroud)

我在docs.oracle.com找到了这个,我想知道这些是ORACLE提供的正确答案吗?在我看来.

1.在答案2中,写道只有默认和静态方法有实现?

2.在回答3的替代方案中,它给出了aMethod可以定义为默认方法但是接口不能有其中的方法,因为默认接口中的方法是抽象的,我们只能在它的子类中实现它的方法.

请让我知道ORACLE网站是对还是错?

java oracle java-8

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

Java 8嵌套的ParallelStream无法正常工作

package com.spse.pricing.client.main;

import java.util.stream.IntStream;

public class NestedParalleStream {

    int total = 0; 

    public static void main(String[] args) {

        NestedParalleStream nestedParalleStream = new NestedParalleStream();
        nestedParalleStream.test();
    }


    void test(){

        try{

            IntStream stream1 = IntStream.range(0, 2);
             stream1.parallel().forEach(a ->{
                IntStream stream2 = IntStream.range(0, 2);
                stream2.parallel().forEach(b ->{
                     IntStream stream3 = IntStream.range(0, 2);
                     stream3.parallel().forEach(c ->{
                         //2 * 2 * 2 = 8;
                         total ++;

                     });
                });
            });

             //It should display 8
            System.out.println(total); 

        }catch(Exception e){

            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请帮助如何自定义并行流,以确保我们得到一致性结果。

java java-8

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

Java 8无法访问的代码

我对Java很新,我在其中一本书中遇到过一两次这个问题.这是一个超级简单的程序,我只是不明白为什么它不起作用.我知道当你使用return时,方法中的任何东西都没有意义.那么这意味着你执行for语句或if语句是一个返回?

我在最新版本的Eclipse中使用Windows 8上的Java 8.

这是我的简单程序:

// Find the sum of 1 through 50 and the average.

class SumAndAverage
{
    public static void main(String args[])
    {
        int sum = 0;
        double average = 0;
        for(int i = 1; 1 <= 50; i++)
        {
            sum += i;
        }

// the following code is "unreachable"
        average = sum / 100;

        System.out.println("The sum is: " + sum);
        System.out.println("The average is " + average);
    }
}
Run Code Online (Sandbox Code Playgroud)

java unreachable-code java-8

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

Java 8泛型类型转换在使用java 7传递时失败

我遇到了这个问题,因此将其作为完整解决方案发布 -

使用Java 8,以下代码将失败并出现运行时异常.问题是getInteger方法返回一个通用的Integer类型,print方法需要精确的Object Type.

public static void main(String[] args) {
    print(getInteger());
}

private static <T> T getInteger() {
    return (T)new Integer(10);
}

private static void  print(Object...o1){
    for(Object o: o1){
       System.out.println(o);
    }
}
Run Code Online (Sandbox Code Playgroud)

java java-8

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

Java 8中的legacy for循环,流和parallelStream之间的比较

import java.util.ArrayList;
import java.util.List;

public class IterationBenchmark {

    public static void main(String args[]){
        List<String> persons = new ArrayList<String>();
        persons.add("AAA");
        persons.add("BBB");
        persons.add("CCC");
        persons.add("DDD");
        long timeMillis = System.currentTimeMillis();
        for(String person : persons)
            System.out.println(person);
        System.out.println("Time taken for legacy for loop : "+
                  (System.currentTimeMillis() - timeMillis));
        timeMillis = System.currentTimeMillis();
        persons.stream().forEach(System.out::println);
        System.out.println("Time taken for sequence stream : "+
                  (System.currentTimeMillis() - timeMillis));
        timeMillis = System.currentTimeMillis();
        persons.parallelStream().forEach(System.out::println);
        System.out.println("Time taken for parallel stream : "+
                  (System.currentTimeMillis() - timeMillis));

    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

AAA
BBB
CCC
DDD
Time taken for …
Run Code Online (Sandbox Code Playgroud)

java performance for-loop java-8 java-stream

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

Java中集合与Java中列表的性能

考虑下面的代码

List<Integer> l=new ArrayList();
Set<Integer> l=new HashSet();
Run Code Online (Sandbox Code Playgroud)

以下哪个 for 循环是最佳的

for(Integer i: some arrray){
    if(!l.contains(i))
    l.add(i);
}
Run Code Online (Sandbox Code Playgroud)

或者

 for(Integer i :some array){
   s.add(i);
}
Run Code Online (Sandbox Code Playgroud)

java collections java-8

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

为什么 SimpleDateFormat 总是忽略连接的时区?

我在 Java 中遇到 Date 和 SimpleDateFormat 对象的一些问题。我知道我需要在 Java 8 中使用新的日期和时间 API 来切换它们,我想这样做,但我有一个问题。当我从数据库中检索我的日期时(它是 SimpleDateFormat 并且我无法更改它),并且当我想添加一些小时(例如下午 4 点),然后我需要在用户从下拉列表中选择的时区中(假设美国/加拉加斯),所以我希望美国/加拉加斯的结果是 16 小时,但在我的情况下是 16 小时 UTC + UTC 和美国/加拉加斯之间的差异。这是我的代码:

Date startDate -> it's value is Tue Feb 23 20:00:00 CET 2021
Date date = new SimpleDateFormat("yyy-MM-dd").format( startDate + 4:00PM + America/Caracas);
Run Code Online (Sandbox Code Playgroud)

但是,奇怪的是,这种格式化广告 4 PM 值但不知何故忽略了时区的那部分。所以,相反,我在美国/加拉加斯有 20 小时,我在 UTC 时间有 20 小时。有人可以帮助我吗?

java datetime date datetime-format java-8

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

从 LocalDate 获取月份中的某天(带前导零)

我得到的日期格式类似于LocalDate dateOfBirthday = LocalDate.of(2000, 1, 1);.

我需要从该日期获取该月的日期。我使用dateOfBirthday.getDayOfMonth()并且它有效并返回1,但我需要得到01.

我怎样才能做到呢?

java java-8 localdate

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

打印 JTextField 在控制台上显示空白

我是 Java 新手,刚刚尝试了 Java 的摆动,我尝试制作一个登录表单,将 JTextField 的内容打印到控制台,但是当我尝试时控制台没有显示任何内容。

这是我的代码:


import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;

public class JavaTextField {

    private JFrame frame;
    private JTextField text1;
    private JTextField text2;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    JavaTextField window = new JavaTextField();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public JavaTextField() {
        initialize(); …
Run Code Online (Sandbox Code Playgroud)

java swing jtextfield java-8

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

Java:为什么for循环和while循环之间的内存使用有差异?

我正在读取XML文件并将其内容推送到ByteArrayOutputStream如下所示:

static final MY_XML_FILE = new File("...");

byte[] buffer = new byte[(int) MY_XML_FILE.length()];
    int bytesRead;
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    while ((bytesRead = fileInputStream.read(buffer)) != -1)
        output.write(buffer, 0, bytesRead);
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.

我不喜欢在-loop bytesRead之外可见的范围while,所以我把它改成了for-loop:

for (int bytesRead = fileInputStream.read(buffer); bytesRead != -1; )
    output.write(buffer, 0, bytesRead);
Run Code Online (Sandbox Code Playgroud)

但是这会引发以下错误:

java.lang.OutOfMemoryError: Requested array size exceeds VM limit
    at java.util.Arrays.copyOf(Arrays.java:3236)
    at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
    at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140)
Run Code Online (Sandbox Code Playgroud)

我的问题是:两种循环方式不一样吗?如果没有,那么我想知道Java中的内存使用情况forwhile循环是如何不同的.

java memory loops java-8

-3
推荐指数
1
解决办法
180
查看次数