标签: java-8

Java 8中接口方法的隐式说明符/修饰符是什么?

我理解接口方法是隐含的public.Java Docs教程

界面中的所有abstract,defaultstatic方法都是隐式的public,因此您可以省略public修饰符.

在抽象,静态和默认情况下,在Java 8中隐式声明了哪些修饰符.

我认为abstractJava 8 default在接口中引入了方法时没有隐式声明,但我仍然在Intellij IDEA中收到警告.

abstract对于接口方法,修饰符' '是冗余的.

public interface TestInterface {
    abstract int print();  // abstract redundant ?.
    int print2(); //legal.but public or public abstract ?.
}
Run Code Online (Sandbox Code Playgroud)

java intellij-idea java-8

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

在Java8中将Map <String,String>转换为List <Object>

我有返回的API,Map<String,String>需要将其转换为DTO。

 SubjectIdAndNameDTO (id, name constructor args)
           id
           name
Run Code Online (Sandbox Code Playgroud)

当前的实现使用传统的for循环和Map.EnterSet。我如何使用Java8的功能来简单地执行以下代码。

 Map<String, String> map = getSubjectIdAndNameMap();          

 // How can this code can be improved by using Java8 Stream and method references

 List<SubjectIdAndNameDTO> subIdNameDTOList = new ArrayList<>();

 for (Entry<String, String> keyset : map.entrySet()) {
        SubjectIdAndNameDTO subjectIdNameDTO = 
                 new SubjectIdAndNameDTO(keyset.getKey(), keyset.getValue());
        subIdNameDTOList.add(subjectIdNameDTO);
 }
Run Code Online (Sandbox Code Playgroud)

java-8 java-stream

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

将字符串列表拆分为地图列表

我有以下清单 [12_223,13_4356,15_5676]

我能够使用以下代码溢出下划线并将其转换为一个Hashmap

list.stream()
    .map(s -> s.split("_"))
    .collect(Collectors.toMap(
        a -> a[0],
        a -> a[1]));
Run Code Online (Sandbox Code Playgroud)

它给出了下面的地图 {"12"="223", "13"="4356", "15"="5676"}

但我想更改此代码,以便它给我一个像下面的地图列表,因为我可能会在分割时遇到重复的键

[{"12"="223"}, {"13"="4356"}, {"15"="5676"}]

java list java-8 java-stream

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

如何使用Java Stream处理列表中的数据

如何使用Java Stream迭代List中的2个循环.

public class ArrayStreams {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(3);
        list.add(5);
        list.add(7);
        list.add(2);

for (int i = 0; i < list.size(); i++) {
            for (int j = i + 1; j < list.size(); j++) {
                System.out.println("i :" + list.get(i) + "J :" + list.get(j));
            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

如何将此代码转换为Java Stream.请帮忙!

java java-8 java-stream

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

为什么这个Java流的一个版本在静态地图上工作而另一个版本失败?

我有一张静态地图:

private static final Map<SomeObject, AnotherObject> SOME_MAP = ...build map here...
Run Code Online (Sandbox Code Playgroud)

我正在尝试生成一个类型列表 List<AnotherObject>

这按预期工作:

List<AnotherObject> list = Stream.of(SOME_MAP.values())
  .flatMap(Collection::stream)
  .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

由于非静态方法无法在静态上下文中引用,因此以下失败

List<AnotherObject> list = SOME_MAP.values().stream()
  .flatMap(Collection::stream)
  .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

任何人都可以确切地解释第二个版本如何在第一个版本没有的情况下包含非静态方法错误?

这是一个具体的例子:

private static final Map<Integer, Integer> SOME_MAP = ImmutableMap.of(1, 2, 3, 4, 5, 6);

@Test
public void workingTest() {
 List<Integer> list = Stream.of(SOME_MAP.values())
    .flatMap(Collection::stream)
    .collect(Collectors.toList());

   System.out.println(list); // prints out [2, 4, 6]
}


@Test
public void nonWorkingTest() {
 List<Integer> list = SOME_MAP.values().stream()
    .flatMap(Collection::stream)
    .collect(Collectors.toList());

   System.out.println(list); // Fails before this.
}
Run Code Online (Sandbox Code Playgroud)

在失败的测试中,我收到以下错误:

Error:(79, …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

Javascript Date.toString输出的DateTimeFormatter

试图new Date().toString()用Java 支持Javascript的输出格式,DateTimeFormatter但似乎无法使其工作.

Js输出具有以下特性:

  • Wed Apr 04 2018 09:56:16 GMT-0500(SA太平洋标准时间)
  • Wed Apr 04 2018 16:12:41 GMT + 0200(CEST)

我目前的格式化程序:

int defaultOffset = ZonedDateTime.now().getOffset().getTotalSeconds();
DateTimeFormatter dtfJs =  new DateTimeFormatterBuilder()
                                .appendPattern("EE MMM dd yyyy HH:mm:ss [OOOO (zzzz)]")
                                .parseDefaulting(ChronoField.OFFSET_SECONDS,defaultOffset 
                                .toFormatter();
Run Code Online (Sandbox Code Playgroud)

如果我.parse()从js那些日期字符串,我得到以下错误:

[date]无法在索引25处解析

上述两个日期的指数25为:

  • GMT-0500(SA太平洋标准时间)
  • GMT + 0200(CEST)

我知道问题是:(冒号),因为如果我打印当前日期dtfJs,我得到:

Wed Apr 04 2018 10:25:10 GMT-05:00(哥伦比亚时间)

因此GMT-05:00,GMT-0500在收到的字符串中执行部分,但我找不到与此匹配的保留模式字母.

文档说:

偏移O:根据模式字母的数量格式化本地化偏移.一个字母输出本地化偏移的缩写形式,即局部偏移文本,例如'GMT',小时不带前导零,可选2位数分钟,第二个非零,和冒号,例如'GMT + 8 ".四个字母输出完整形式,这是本地化的偏移文本,例如'GMT,具有2位小时和分钟字段,可选的第二字段(如果非零)和冒号,例如'GMT + 08:00'.任何其他字母数量都会抛出IllegalArgumentException.

偏移Z:根据图案字母的数量格式化偏移.一个,两个或三个字母输出

小时和分钟,没有冒号,例如'+0130'.当偏移量为零时,输出将为"+0000".四个字母输出完整形式的局部偏移,相当于Offset-O的四个字母.如果偏移为零,则输出将是相应的本地化偏移文本.五个字母输出小时,分钟,可选第二个,如果非零,则使用冒号.如果偏移量为零,则输出"Z".六个或更多字母抛出IllegalArgumentException.

这意味着四个字母将始终以冒号":"输出,从而抛出 DateTimeParseException

非常感谢,谢谢 …

javascript java java-8 java-time

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

Java日期时间格式检查和重置

字符串是一个输入,我必须检查它是否是这些格式中的任何一种.如果它是sdf1格式然后传递,如果它在sdf2,3 ....然后我添加缺少格式并用sdf1格式解析它

SimpleDateFormat sdf1 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
SimpleDateFormat sdf2 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ssa");
SimpleDateFormat sdf3 = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
SimpleDateFormat sdf3 = new SimpleDateFormat("MM/dd/yyyy hh:mma");
SimpleDateFormat sdf3 = new SimpleDateFormat("MM/dd/yyyy hh:mm");
SimpleDateFormat sdf3 = new SimpleDateFormat("MM/dd/yyyy"); 
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的

try{
            // Parse if it is MM/dd/yyyy hh:mm:ss a
            cal = Calendar.getInstance();
            cal.setTime(sdf1.parse(inStr));
          }catch(Exception exp){
             try{
               cal = Calendar.getInstance();
               //Parse if it is MM/dd/yyyy hh:mm:ssa                      
               sdf2.parse(inStr);                 
               inStr = new StringBuilder(inStr).insert(str.length()-2, " ").toString();
               cal.setTime(sdf1.parse(inStr));
              }catch(Exception dte2){
                try{
                    cal = Calendar.getInstance();
                    //Parse …
Run Code Online (Sandbox Code Playgroud)

java datetime datetime-parsing java-8

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

在Java8中推断Optional的泛型

我正在尝试实现一个方法,它返回一个类的可选:A,B,C扩展母亲.

我不知道从哪里开始.我试过这样的事

    private Optional<U> get(String query,U u){
    }

A = c.get("Looking for an A",A.class)
B = c.get("Looking for an B",B.class)
C = c.get("Looking for an C",C.class)
C = c.get("Looking for an k",k.class) // Exception, K doesn't extend `Mother`
Run Code Online (Sandbox Code Playgroud)

java java-8

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

哪个更快int [0]或AtomicInteger?

如果我不关心线程安全哪个更好?

int[] index = {0};
index[0]++;
Run Code Online (Sandbox Code Playgroud)

VS

AtomicInteger index = new AtomicInteger(0); 
index.getAndIncrement()
Run Code Online (Sandbox Code Playgroud)

java performance java-8

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

如何使用Java 8流将字符串数组转换为Big-integer数组

我有一个String数组,我想使用Java 8流将其转换为BigInteger数组。

String[] output = bigSorting(new String[]{"31415926535897932384626433832795", "1", "4900146572543628830293235422623540449026979", "10", "57500297590012603652986133599394871645776460", "5", 
                    "497010206818067722087306230802257700034825862515267073569769100385728461314", "57500297590012603652986133599394871645776460497010206818067722087306230802257700034825862515267073569769100385728461314497010206818067722087306230802257700034825862515267073569769100385728461314497010206818067722087306230802257700034825862515267073569769100385728461314497010206818067722087306230802257700034825862515267073569769100385728461314497010206818067722087306230802257700034825862515267073569769100385728461314"});
        Object[] unsortedBigIntegerArr = convertFromStringArrayToBigIntegerArray(output);
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的方法,但是我无法获取BigInteger数组,但是却能够获取Object数组。

private static Object[] convertFromStringArrayToBigIntegerArray(String[] unsorted) {
        return Arrays.stream(unsorted).map(BigSorting2::convertFromStringToBigInteger).toArray();
    }

    private static BigInteger convertFromStringToBigInteger(String unsorted) {
        return new BigInteger(unsorted);
    }
Run Code Online (Sandbox Code Playgroud)

有什么办法可以使用Java 8流完全完成它。

java biginteger java-8 java-stream

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