我注意到一个奇怪的结构ConcurrentHashMap的compute和computeIfAbsent方法:
Node<K,V> r = new ReservationNode<K,V>();
synchronized (r) {
//...
}
Run Code Online (Sandbox Code Playgroud)
考虑到JIT最有可能将其视为无操作,本地对象同步的重点是什么?
guava库有它自己的Supplier,不扩展Java 8 Supplier.番石榴还为供应商提供缓存 - Suppliers#memoize.
是否有类似的东西,但对于Java 8供应商?
每个客户都有一个 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”添加数据。所以它似乎没有多大帮助。
我有以下两个实现的接口:
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) Comparator接口有自己的equals()方法.equals()默认情况下,任何类都将通过Object类获取.equals()在接口中有什么方法需要?
我使用 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) 假设我们有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) 我已经阅读了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.在我看来,第一个代码比第二个代码更清晰.
我正在研究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) 为什么不stream.count()退货int?
我明白,我可以很容易地转换long成int铸造,
return (int) players.stream().filter(Player::isActive).count();
Run Code Online (Sandbox Code Playgroud)
但是为什么 java会stream.count()返回long而不是int?
java-8 ×10
java ×9
java-stream ×2
comparator ×1
generics ×1
guava ×1
hashmap ×1
inheritance ×1
javafx ×1
lambda ×1
oop ×1
optional ×1
synchronized ×1