标签: java-8

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

参考方法Java 8

我想要洗牌清单.我想这样做的方法是在java 8的列表中使用sort方法.我想为每个数字分配0到1之间的随机数,并根据它对列表进行排序.在这里我拥有和它的工作原理:

List<Integer> list = Arrays.asList(1,2,3,4,5);
list.sort(comparing(x->new Random().nextFloat()));
Run Code Online (Sandbox Code Playgroud)

它的工作原理.但是,当我想使用这样的参考方法时:

list.sort(comparing(Random::nextFloat));
Run Code Online (Sandbox Code Playgroud)

我得到编译时错误,我不明白为什么.毕竟我的比较器为每个元素生成随机数,然后按此随机数排序.有任何想法吗?

提前谢谢你

java java-8

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

为什么Java 8中的IntStream.range(0,n)不应该是并行的?

我已经阅读了一本关于Java 8的书,该书说使用并行流来获取数字的范围IntStream.range(0,someNumber)可能比连续的慢...为什么?

java java-8 java-stream

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

如何在java 8中使用String.format?

今天我在java 8中用eclipse Kepler编写了一个简单的程序.实际上,我从一些视频教程中复制了它.在那个教程中,它运行了,但在我的计算机中却没有.错误行是

 String.format("%02d:%02d:%02d",hour,minute,second);
Run Code Online (Sandbox Code Playgroud)

我不明白这里的错误是什么.它突出了format(String,object[])该类型的方法String不适用于argument(String, int, int, int)

public class Demo {

private int hour;
    private int second;
    private int minute;

    public void setTime(int h,int m,int s){
        hour=((h>=0 && h<24)?h:0);
        minute=((m>=0 && m<60)?m:0);
        second=((s>=0 && s<60)?s:0);
    }

    public String railwayTime(){
        return String.format("%02d:%02d:%02d",hour,minute,second);//error in this line
    }

    public String regular(){
        return String.format("%02d:%02d:%02d %s",((hour==0 ||hour==24)?12:(hour%12)), minute, second, (hour>=12)?"AM":"PM");//error in this line
    }
}

public class ShowTime {
    public static void main(String[] args){
        Demo d=new Demo();
        System.out.println(d.railwayTime());
        System.out.println(d.regular()); …
Run Code Online (Sandbox Code Playgroud)

java string java-8

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

弹簧靴性能和整体体验

我真的很喜欢使用弹簧靴是多么容易.在他们的制作应用程序中是否使用过弹簧靴?如果是这样,使用它时有什么优点/缺点和陷阱?使用spring boot的嵌入式容器有什么表现?

谢谢-Parshu

spring java-8 spring-boot

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

如何制作类的ArrayList?

我如何添加一堆类ArrayList<MyBaseClass>,然后从中检索一个类(从中派生,但不是MyBaseClass从中),ArrayList并使用它来生成检索到的实际类的新对象(即不是MyBaseClass因为它是抽象的)

所有需要添加的类都派生自相同的抽象基类Class(MyBaseClass)

我真的想不出另一种方法来实现我想做的事情,所以希望这是可能的......?

java factory class arraylist java-8

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

替代多个嵌套for和if块

我正在尝试实现一个复杂的块,我使用多个for循环编写,如果条件更复杂的东西.最初的代码是

for(Coll_Monthly_Main monthlyAccount:monthlyList){
        for(Coll_Daily_Main dailyAccount:dailyList){
            if(monthlyAccount.getAccountId().trim().equals(dailyAccount.getAccountId().trim())){
                for(Catg_Monthly monthlyCategory: monthlyAccount.getCatg()){
                    for(Catg_Daily dailyCategory: dailyAccount.getCatg()){
                        if(monthlyCategory.getPriCatId().trim().equals(dailyCategory.getPriCatId().trim())){
                            monthlyCategory.setMthTtl(dailyCategory.getMthTtl());
                            monthlyCategory.setMtd(dailyCategory.getMtd());
                            monthlyCategory.setYtd(dailyCategory.getYtd());

                            for(SecCatDtl_Mthly monthlySecCategory:monthlyCategory.getSecCatDtl()){
                                for(SecCatDtl_Daily dailySecCategory:dailyCategory.getSecCatDtl()){
                                    if(monthlySecCategory.getCatId().trim().equals(dailySecCategory.getCatId().trim())){
                                        monthlySecCategory.setMthTtl(dailySecCategory.getMthTtl());
                                        monthlySecCategory.setMtd(dailySecCategory.getMtd());
                                        monthlySecCategory.setYtd(dailySecCategory.getYtd());
                                    }
                                }
                            }
                        }

                    }
                }
            }
        }
    }
    return monthlyList;
Run Code Online (Sandbox Code Playgroud)

我已经按照这个答案设法实现了第一级如下: -

monthlyList.forEach(coll_mthly->{
        dailyList.stream().filter(coll_daily->coll_mthly.getAccountId().trim().equals(coll_daily.getAccountId().trim()))
        .forEach(catg_mth->coll_mthly.getCatg())->{

        };
    });
Run Code Online (Sandbox Code Playgroud)

对于下一级嵌套,我需要循环嵌套列表,我不知道如何继续它.我不断收到如下语法错误: - 令牌上的语法错误,而不是TypeElidedFormalParameter

我很欣赏正确方向的任何指示.

更新: - 按照托马斯的回答,这就是它的样子

Map<String, Coll_Daily_Main> dailies = dailyList.stream().collect(Collectors.toMap(cdm -> cdm.getAccountId(), cdm-> cdm) );

    for(Coll_Monthly_Main monthlyAccount : monthlyList) {
        Coll_Daily_Main dailiesForAccount  = dailies.get( monthlyAccount.getAccountId().trim());

          Map<String, Catg_Daily> dailyCatgories=dailiesForAccount.getCatg().stream().collect(Collectors.toMap(cv->cv.getPriCatId(), cv->cv));
          for(Catg_Monthly monthlyCategory:monthlyAccount.getCatg()){
              Catg_Daily dailyCategory = …
Run Code Online (Sandbox Code Playgroud)

java foreach nested-loops java-8 java-stream

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

为什么我们不能将lambda表达式直接赋给Object类型的引用变量?

我正在做一些lambda表达式的实验,看到了一些我无法理解的行为.

    Consumer consumer = (o1) -> {};
    Object obj1 = consumer; // this two line working fine 
Run Code Online (Sandbox Code Playgroud)

2行以上的代码时,我分配预期不抱怨任何事情consumerobj1.

但是,当我尝试将lambda直接分配给对象时,它开始给我一个编译错误.

    Object obj2 = (o1) -> {}; // this line gives compilation error
Run Code Online (Sandbox Code Playgroud)

上面的代码行给出了一个错误:

此表达式的目标类型必须是功能接口.

我的问题是为什么我们不能直接将lambda分配给类型的引用变量Object

编辑:我已经编辑了我的问题,因为有一个类似的问题已经提到但我的问题主要目标是确保为什么Object o1 = "Hello"会工作但不是lambda.

java lambda java-8 functional-interface

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

有没有办法将Array转换为Map?

我有一个数组,我想转换为Map,这样数组中的第一个元素是键,第二个元素是值,依此类推.

我正在尝试以下内容:

Arrays.asList("Tamilnadu", "chennai", "Karnataka", "Bengluru")
                .stream()
                .collect(HashMap::new,
                        (a, b) -> a.put(b, ""),//value should be next element in array
                        (a, b) -> a.putAll(b)
                );
Run Code Online (Sandbox Code Playgroud)

我的困惑是如何在同一个迭代中获取下一个元素,以便我可以做到a.put(b,nextElementToB).

有人可以通过使用流来帮助解决这个问题,因为我想尝试使用函数式编程吗?迭代将成为这样做的唯一方法吗?

java java-8 java-9 java-10

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

Apache DateUtils无法解析2018-03-11 02:00:00夏令时时间戳

public static void main(String[] args){
        Date date = null;
        try {
            date = DateUtils.parseDateStrictly("2018-03-11 01:59:00", "yyyy-MM-dd HH:mm:ss");
            System.out.println(date.getTime());
            date = DateUtils.parseDateStrictly("2018-03-11 02:00:00", "yyyy-MM-dd HH:mm:ss");
            System.out.println(date.getTime());
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

第一个时间戳被成功解析,但第二个时间戳无法解析.org.apache.commons.lang3.time.DateUtils有错误吗?我正在使用commons-lang3-3.4.jar

1520751540000
java.text.ParseException:无法在org.apache.com上的org.apache.commons.lang3.time.DateUtils.parseDateWithLeniency(DateUtils.java:401)处解析日期:2018-03-11 02:00:00位于com.ecw.vocabulary.mapper.impl.Test.testMetoo的org.apache.commons.lang3.time.DateUtils.parseDateStrictly(DateUtils.java:321)的.lang3.time.DateUtils.parseDateStrictly(DateUtils.java:343) (Test.java:59)at com.ecw.vocabulary.mapper.impl.Test.main(Test.java:40)

java apache-commons java-8 apache-commons-dateutils

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