标签: java-8

Java 8中的顺序流是否在调用collect时使用了combiner参数?

如果我在顺序流上调用collect(例如,从调用Collection.stream()),那么它将使用我传递的汇编器参数来收集吗?我猜不是,但我在文档中看不到任何内容.如果我是正确的,那么不得不提供我知道不会被使用的东西(如果我知道它是顺序流)似乎是不幸的.

java java-8 java-stream

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

通用类型推断无法使用方法链接?

此代码在Java 8中编译,但无法在Java 7中编译:

class Map<K,V> {
    static <K,V> Map<K,V> empty() {return null;}
    Map<K,V> put(K k, V v) {return null;}
    V get(K k) {return null;}
}

class A {
    static void f(Map<Integer,String> m){}
    public static void main(String[] args) {
        f(Map.empty());
    }
}
Run Code Online (Sandbox Code Playgroud)

它不会推断出Map返回的具体类型Map.empty():

$ javac7 A.java
A.java:10: error: method f in class A cannot be applied to given types;
        f(Map.empty());
        ^
  required: Map<Integer,String>
  found: Map<Object,Object>
  reason: actual argument Map<Object,Object> cannot be converted to Map<Integer,String> by method invocation …
Run Code Online (Sandbox Code Playgroud)

java generics type-inference java-7 java-8

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

收集HashMap <String,List <String >> java 8

我希望能够将转换ListHashMap其中关键是elementName和值是随机的东西(在这种情况下,它的元素名称)的列表.所以总之我想要(A->List(A), B->List(B), C-> List(C)).我尝试使用toMap()并传递它keyMapper,ValueMapper但我收到编译错误.如果有人可以帮助我,我真的很感激.

谢谢!

public static void main(String[] args) {
    // TODO Auto-generated method stub
    List<String> list = Arrays.asList("A","B","C","D");
    Map<String, List<String>> map = list.stream().map((element)->{
        Map<String, List<String>> map = new HashMap<>();
        map.put(element, Arrays.asList(element));
        return map;
    }).collect(??);
}


Function<Map<String, String>, String> key = (map) -> {
    return map.keySet().stream().findFirst().get();
};

Function<Map<String, String>, String> value = (map) -> {
    return map.values().stream().findFirst().get();
};
Run Code Online (Sandbox Code Playgroud)

=== 这对我有用

谢谢你所有的帮助!@izstas"他们应该对元素进行操作"帮了很多:).实际上这正是我想要的确切

public static void …
Run Code Online (Sandbox Code Playgroud)

java list hashmap java-8 collectors

27
推荐指数
3
解决办法
5万
查看次数

Java 8中"If/Throw,Else/Return"逻辑的简写?

在Java 8中if/throw else/return是否有更短的语法?java.util.Optional提供了在一个语句中完成此操作的方法,但它需要Optional为每个具有非空引用的调用创建一个实例.

这可以在一个声明中完成吗?

public static MyEnum fromString(String value) {
    MyEnum result = enumMap.get(value);
    if (result == null)
        throw new IllegalArgumentException("Unsupported value: " + value);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

可选示例(错误,每次都需要可选实例)

public static MyEnum fromString(String value) {
    return Optional.ofNullable(enumMap.get(value)).orElseThrow(
        () -> new IllegalArgumentException("Unsupported value: " + value));
}
Run Code Online (Sandbox Code Playgroud)

java java-8

27
推荐指数
1
解决办法
3万
查看次数

从Java 8中的Method返回Lambda?

我刚刚开始使用Java 8,我想知道是否有办法编写一个返回的方法Function

现在我的方法如下:

Function<Integer, String> getMyFunction() {
  return new Function<Integer, String>() {
    @Override public String apply(Integer integer) {
      return "Hello, world!"
    }
  } 
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在Java 8中更简洁地编写?我希望这会起作用,但它不会:

Function<Integer, String> getMyFunction() {
  return (it) -> { return "Hello, world: " + it } 
}
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

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

为什么Scala hashmap变慢?

那可以做些什么呢?

我已经运行了一些测试,似乎Scala Hashmap比Java HashMap慢得多.请证明我错了!

对我来说,Hashmap的重点是快速访问给定键的值.因此,当速度很重要时,我发现自己会使用Java HashMap,这有点让人伤心.我没有足够的经验肯定地说,但似乎你混合Java和Scala越多,你可能面临的问题就越多.

test("that scala hashmap is slower than java") {
    val javaMap = new util.HashMap[Int,Int](){
      for (i <- 1 to 20)
      put(i,i+1)
    }

    import collection.JavaConverters._
    val scalaMap = javaMap.asScala.toMap

    // check is a scala hashmap
    assert(scalaMap.getClass.getSuperclass === classOf[scala.collection.immutable.HashMap[Int,Int]])

    def slow = {
      val start = System.nanoTime()
      for (i <- 1 to 1000) {
        for (i <- 1 to 20) {
          scalaMap(i)
        }
      }
      System.nanoTime() - start
    }

    def fast = {
      val start = System.nanoTime()
      for …
Run Code Online (Sandbox Code Playgroud)

scala hashmap java-8 scala-2.11

27
推荐指数
2
解决办法
6521
查看次数

合并Java 8中的两个对象列表

我有一个Parent具有20个属性的Java类(attrib1, attrib2 .. attrib20)及其相应的getter和setter.我还有两个Parent对象列表:list1list2.

现在我想合并两个列表并避免基于attrib1和的重复对象attrib2.

使用Java 8:

List<Parent> result = Stream.concat(list1.stream(), list2.stream())
                .distinct()
                .collect(Collectors.toList());   
Run Code Online (Sandbox Code Playgroud)

但是我必须在哪个地方指定属性?我应该覆盖hashCodeequals方法吗?

java java-8 java-stream

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

如何使用JPA和Spring在列表中找到包含字段的不同行?

我使用Spring连接到数据库.我有一个扩展接口CrudRepository<People, Long>这是我想在db上执行的查询:SELECT DISTINCT name FROM people WHERE name NOT IN UserInputSet.我更愿意在没有任何sql注释的情况下完成它,所以如果没有那么好就可以NOT.

有办法吗?我查看了春季文档,但我找不到任何内容(http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation)


这就是我累了,但它不起作用.

@Query("SELECT DISTINCT name FROM people WHERE name NOT IN (?1)")
List<String> findNonReferencedNames(List<String> names);
Run Code Online (Sandbox Code Playgroud)

这是我得到的例外:

Error creating bean with name 'peopleRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List de.test.tasks.persistence.PeopleRepository.findNonReferencedNames(java.util.List)!
Run Code Online (Sandbox Code Playgroud)

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: people is not mapped [SELECT name FROM people WHERE name NOT IN (?1)]
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa java-8

27
推荐指数
4
解决办法
7万
查看次数

用于功能接口的Java 8 lambda模糊方法 - 目标类型

我有以下代码:

public class LambdaTest1 {

    public static void method1(Predicate<Integer> predicate){
        System.out.println("Inside Predicate");
    }

    public static void method1(Function<Integer,String> function){
        System.out.println("Inside Function");
    }

    public static void main(String[] args) {        
        method1((i) -> "Test"); 
    }
}
Run Code Online (Sandbox Code Playgroud)

这给我一个错误信息

"方法method1(谓词)对于LambdaTest1类型是不明确的".

我可以看到,对于FunctionConsumer功能接口,输入参数是Integer.但对于Function,返回类型是String.

因为我的lambda调用具有返回值"Text" - 这应该调用我的Function函数接口而不是抛出此错误.

任何人都可以解释这种行为背后的原因吗?

另一个例子:

public class LambdaTest1 {

public static void method1(Consumer<Integer> consumer){
    System.out.println("Inside Consumer");
}

public static void method1(Predicate<Integer> predicate){
    System.out.println("Inside Predicate");
}

public static void main(String[] args) {

    List<Integer> lst …
Run Code Online (Sandbox Code Playgroud)

java lambda functional-programming java-8

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

为什么Java 8 ZonedDateTime认为24:01是一个有效的时间字符串表示?

我需要获得两个ZonedDateTime实例来表示当前周的开始和结束.

ZonedDateTime currentDateTime = ZonedDateTime.now();
ZonedDateTime startOfThisWeek = currentDateTime.with(DayOfWeek.MONDAY).truncatedTo(ChronoUnit.DAYS).plusMinutes(1);
ZonedDateTime endOfThisWeek = startOfThisWeek.plusDays(6);
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd kk:mm");
String startweek = startOfThisWeek.format(df);
String endweek = endOfThisWeek.format(df);
System.out.println(startweek);
System.out.println(endweek);
Run Code Online (Sandbox Code Playgroud)

输出:

2018-06-18 24:01
2018-06-24 24:01
Run Code Online (Sandbox Code Playgroud)

这个字符串代表什么?是在2018-06-18上午午夜后1分钟?如果是这样,为什么24:01是有效时间?我认为在24小时制表示中它应该是00:01.

编辑:有没有办法格式化这个显示00:01而不将字符串转换为新的字符串?

java datetime java-8

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