标签: java-8

同步局部变量

我注意到一个奇怪的结构ConcurrentHashMapcomputecomputeIfAbsent方法:

Node<K,V> r = new ReservationNode<K,V>();
synchronized (r) {
  //...
}
Run Code Online (Sandbox Code Playgroud)

考虑到JIT最有可能将其视为无操作,本地对象同步的重点是什么?

java multithreading synchronized concurrenthashmap java-8

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

Java 8是否已缓存对供应商的支持?

guava库有它自己的Supplier,不扩展Java 8 Supplier.番石榴还为供应商提供缓存 - Suppliers#memoize.

是否有类似的东西,但对于Java 8供应商?

java guava java-8

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

如何避免重复代码初始化 hashmap 的 hashmap?

每个客户都有一个 id 和许多带有日期的发票,这些发票按 id 存储为客户的 Hashmap,按日期存储为发票的哈希图:

HashMap<LocalDateTime, Invoice> allInvoices = allInvoicesAllClients.get(id);

if(allInvoices!=null){
    allInvoices.put(date, invoice);      //<---REPEATED CODE
}else{
    allInvoices = new HashMap<>();
    allInvoices.put(date, invoice);      //<---REPEATED CODE
    allInvoicesAllClients.put(id, allInvoices);
}
Run Code Online (Sandbox Code Playgroud)

Java 解决方案似乎是使用getOrDefault

HashMap<LocalDateTime, Invoice> allInvoices = allInvoicesAllClients.getOrDefault(
    id,
    new HashMap<LocalDateTime, Invoice> (){{  put(date, invoice); }}
);
Run Code Online (Sandbox Code Playgroud)

但是如果 get 不为空,我仍然希望 put (date, invoice) 执行,并且仍然需要向“allInvoicesAllClients”添加数据。所以它似乎没有多大帮助。

java hashmap java-8

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

使用流和 Java 8 的 If/else 表示

我有以下两个实现的接口:

public interface Parser {
    void parse();
    boolean canParse(String message);
}

class StackParser implements Parser {
    public void parse(){
        System.out.println("Parsing stackoverflow");
    }
    public boolean canParse(String message){
        return message.equals("stackoverflow");
    }
}

class YoutubeParser implements Parser {
    public void parse() {
        System.out.println("Parsing youtube");
    }
    public boolean canParse(String message) {
        return message.equals("youtube");
    }
}
Run Code Online (Sandbox Code Playgroud)

我去检查传入的消息并解析"stackoverflow""youtube"

public class Main {
    private List<Parser> parsers;


    public static void main(String[] args) {
        new Main().doSomething("youtube");
    }

    void doSomething(String message){
        parsers.stream()
                .filter(p -> p.canParse(message))
                .forEach(p …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

为什么比较器声明等于?

Comparator接口有自己的equals()方法.equals()默认情况下,任何类都将通过Object类获取.equals()在接口中有什么方法需要?

java lambda comparator java-8 functional-interface

26
推荐指数
2
解决办法
4080
查看次数

在Java 8中使用多重继承

使用 Java 8的功能还是滥用它?

请参阅下面的代码和说明,了解为什么选择它是这样的.

public interface Drawable {
    public void compileProgram();

    public Program getProgram();

    default public boolean isTessellated() {
        return false;
    }

    default public boolean isInstanced() {
        return false;
    }

    default public int getInstancesCount() {
        return 0;
    }

    public int getDataSize();

    public FloatBuffer putData(final FloatBuffer dataBuffer);

    public int getDataMode();

    public boolean isShadowReceiver();

    public boolean isShadowCaster();    //TODO use for AABB calculations

    default public void drawDepthPass(final int offset, final Program depthNormalProgram, final Program depthTessellationProgram) {
        Program depthProgram = (isTessellated()) …
Run Code Online (Sandbox Code Playgroud)

java oop inheritance multiple-inheritance java-8

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

Java类型推断:Java 8中的引用不明确,但Java 7则不然

假设我们有2节课.一个空类Base,以及该类的子类Derived.

public class Base {}

public class Derived extends Base {}
Run Code Online (Sandbox Code Playgroud)

然后我们在另一个类中有几个方法:

import java.util.Collection

public class Consumer {

    public void test() {
        set(new Derived(), new Consumer().get());
    }

    public <T extends Base> T get() {
        return (T) new Derived();
    }

    public void set(Base i, Derived b) {
        System.out.println("base");
    }

    public void set(Derived d, Collection<? extends Consumer> o) {
        System.out.println("object");
    }

}
Run Code Online (Sandbox Code Playgroud)

这在Java 7中成功编译并运行,但不能在Java 8中编译.错误:

Error:(8, 9) java: reference to set is ambiguous
  both method set(Base,Derived) in Consumer …
Run Code Online (Sandbox Code Playgroud)

java generics type-inference compiler-errors java-8

26
推荐指数
2
解决办法
5277
查看次数

在类中使用Optional作为属性是一个好习惯吗?

我已经阅读了OptionalJava 8中的目的(遗憾的是我不记得在哪里),我很惊讶作者没有提到在类中使用an Optional作为属性.

由于我在课堂上经常使用选项,我想知道这是不是很好.或者我可以更好地使用普通属性,null它们在未设置时返回?

注意:看起来我的问题可能是基于意见的,但我觉得Optional在课堂上使用的感觉真的不是要走的路(看完上面提到的帖子后).但是,我喜欢使用它,并且找不到使用它的任何缺点.

我想举一个例子来澄清.我有一个类Transaction,它是这样构建的:

public class Transaction {

     private Optional<Customer> = Optional.empty();
     ....
Run Code Online (Sandbox Code Playgroud)

VS

public class Transaction {

     private Customer = null;
     ....
Run Code Online (Sandbox Code Playgroud)

当在一个检查Customer,我认为这是最合理的使用transaction.getCustomer().isPresent()transaction.getCustomer() != null.在我看来,第一个代码比第二个代码更清晰.

java optional java-8

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

JavaFX:在实例化控制器类时传递参数

我正在研究JavaFX应用程序.我的所有gui都是.fxml格式化的,通过控制器类来管理所有GUI组件.但是,在加载FXML加载器之前,我在实例化控制器类时遇到了困难.我无法从stackoverflow上的其他人那里找到一个很好的解决方案,因此这不是一个重复的问题.

我实例化控制器类的原因是我想传递一些参数,以便这些参数将显示在GUI中.

我按以下方式加载FXML文件:

/*
 * for Work Order button
 */
@FXML
private void pressWorkOrder() throws Exception{ 
    WorkOrderController wo = new WorkOrderController("ashdkjhsahd");    //instantiating constructor     

    Parent parent = FXMLLoader.load(getClass().getResource("/fxml/WorkOrder.fxml"));        
    Scene scene = new Scene(parent);
    Stage stage = new Stage();
    stage.setScene(scene);
    stage.setTitle("Word Order");
    stage.setResizable(false);
    stage.show();
}
Run Code Online (Sandbox Code Playgroud)

这是我的实际Controller类:

public class WorkOrderController implements Initializable{

     @FXML
     private Button summary;
     private String m,n;

     public WorkOrderController(String str) {
         // TODO Auto-generated constructor stub
         m = str;
     }  

     //for testing
     public void set(String …
Run Code Online (Sandbox Code Playgroud)

javafx java-8

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

为什么java stream.count()返回long?

为什么不stream.count()退货int

我明白,我可以很容易地转换longint铸造,

return (int) players.stream().filter(Player::isActive).count();
Run Code Online (Sandbox Code Playgroud)

但是为什么 java会stream.count()返回long而不是int

java java-8 java-stream

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