如果我有一个集合,我想迭代一个过滤流,那么我可以做以下任何一个(以及更多的钝选项):
for(item in collection.stream().filter(...).collect(Collectors.toList()))
for(item in collection.stream().filter(...).collect(Collectors.toSet()))
Run Code Online (Sandbox Code Playgroud)
哪个更快?一个列表还是一组?有没有办法收集简单的Iterable或其他类型我可以迭代?
我有一个带有一些标签的JTabbedPane,标签旁边还有很多未使用的额外空间.所以我正在尝试使用它并在那里放置一些按钮(就像在Eclipse中一样).我把按钮放在GlassPane上:
JPanel glasspane = getPanelWithButtons();
// panel with FlowLayout.RIGHT
frame.setGlassPane(glasspane);
glasspane.setOpaque(false);
glasspane.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
这是有效的,我仍然可以点击我的gui的其他元素(我发现的大多数搜索结果都是关于如何防止这种情况).到目前为止唯一的问题是当鼠标指针悬停在JSplitPane的条形图上时,鼠标指针不会更改为该双端水平箭头.我怎样才能恢复这种行为?
编辑
我发现没有显示玻璃窗格下任何组件的鼠标更改事件.这些组件会将鼠标光标更改为手形光标,变焦镜头等.这些鼠标指针更改都不会产生任何影响.我想这是因为在玻璃窗格中,需要对玻璃窗格进行鼠标指针更改,但我不想手动更改所有鼠标指针.
我正在使用泛型方法进行一些测试,我想在下面转换这两个方法(convertFloatListToArray和convertShortListToArray)(convertListToArray):
public class Helper{
public static float[] convertFloatListToArray(List<Float> list){
float[] array = new float[list.size()];
for(int i = 0; i<list.size(); i++){
array[i] = list.get(i);
}
return array;
}
public static short[] convertShortListToArray(List<Short> list){
short[] array = new short[list.size()];
for(int i = 0; i<list.size(); i++){
array[i] = list.get(i);
}
return array;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用泛型时,如下所示,我有一些错误:
public class Helper{
public static <T, E> T convertListToArray(List<E> list){
T array = new T[list.size()];
for(int i = 0; i<list.size(); i++){
array[i] = list.get(i);
}
return array;
} …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
Set<Class<Event>> s = new HashSet<>();
Set<Class<? extends Event>> s2 = new HashSet<>();
Event e = new Event();
s.add(e.getClass()); // #1
s2.add(e.getClass()); // #2
class Event {
// ...
}
Run Code Online (Sandbox Code Playgroud)
为什么编译器会在语句中引发错误#1?
我正在使用Java 7.
我想知道为什么Java编译器不接受这个赋值:
Class<? extends List<?>> blbost = ArrayList.class;
Run Code Online (Sandbox Code Playgroud)
请注意,我对解决方案不感兴趣Class<? extends List<?>> blobst = (Class<? extends List<?>>)ArrayList.class;,我想知道它可以使用的原因是什么.
最初的动机是在注释中使用泛型:
@SomeAnnotation(SomeFunction.class) // Syntax error here!
private static class SomeClass {
}
private @interface SomeAnnotation {
Class<? extends Function<?, ?>> value();
}
private static class SomeFunction<T> implements Function<T, String> {
@Override
public String apply(T t) {
return t.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
我不能在注释中使用强制转换,因为值必须是常量.
为什么我不能SomeFunction作为一个参数传递,SomeAnnotation我该怎么做呢?
当我遇到一个非常奇怪的问题时,我正在使用 JavaFX 创建一个程序。我想用包含下划线 (_) 的文本创建一个 MenuItem,但是当显示该文本时,下划线消失了。这是一个示例代码:
public class JavaFXTest extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane mainPane = new BorderPane();
MenuBar menuBar = new MenuBar();
Menu menu = new Menu("Menu");
menuBar.getMenus().add(menu);
MenuItem item = new MenuItem("Test_underscore");
menu.getItems().add(item);
mainPane.setTop(menuBar);
primaryStage.setScene(new Scene(mainPane, 890, 570));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
它不显示“Test_underscore”,而是显示:
有谁知道这里会发生什么?
我有一个歌曲的Arraylist存储标题,艺术家和时间我写了我的所有代码和一切.我只是想了解更多关于Collection.sort和Collection.reverse以及Collection.reverseOrder的信息.我有一个包含所有歌曲和所有内容的文件.我想根据时间按降序排序歌曲.
当我尝试这个时,我得到一个错误或它没有正确排序.任何人都可以建议我如何使用Collection.sort并使用比较器
Comparator<Song> comparator = Collections.reverseOrder();
Collections.reverse(listOfSongs);
Run Code Online (Sandbox Code Playgroud)
我的比较方法如下:
public int compare(Song mySong1,Song mySong2 ){
if (mySong1.getLength() > mySong2.getLength()){
return -1;
}
if(mySong1.getLength() < mySong2.getLength()){
return 1;
}
if(mySong1.getLength() == mySong2.getLength())
{
if(mySong1.getTitle().compareTo(mySong2.getTitle()) > 0){
return -1;
}
if(mySong1.getTitle().compareTo(mySong2.getTitle()) < 0 ){
return 1;
}
else {
if(mySong1.getComposer().compareTo(mySong2.getComposer()) >0){
return -1;
}
if(mySong1.getComposer().compareTo(mySong2.getComposer()) <0) {
return 1;
}
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我和我的朋友正在讨论String,并且知道调用toString()String会创建新对象吗?但即便是我的朋友也不知道原因.谁可以给我解释一下这个?
我为我的程序使用了HashMap,它工作正常,但我不明白HashMap的这些初始化之间的区别.
假设我正在实现一个HashMap,其中一个字符作为键,一个整数作为值.这些有什么区别?
HashMap<Character, Integer> alphabet1 = new HashMap();
HashMap<Character, Integer> alphabet1 = new HashMap<Character, Integer>();
HashMap alphabet1 = new HashMap<Character, Integer>();
Map alphabet1 = new HashMap<Character, Integer>();
HashMap alphabet1 = new HashMap<Character, Integer>();
HashMap alphabet1 = new HashMap();
Map alphabet1 = new HashMap();
Run Code Online (Sandbox Code Playgroud) 番石榴的JavaDoc的Sets.SetView.union()(以及intersection(),difference()和symmetricDifference())提及"对等关系":
结果是不确定的,如果
set1和set2是基于不同的等价关系集(如HashSet,TreeSet和Map.keySet()一个的IdentityHashMap都是).
我很难理解那句话的意思.
术语表将"等价关系"定义为反身(" a.relation(a)总是true"),对称(a1.relation(a2) == a2.relation(a1))和传递(a1.relation(a2) && a2.relation(a3)暗示a1.relation(a3)) - 并且指Object.equals()'docs'.(不幸的是,番石榴维基没有详细说明......
但是Set在这方面不同类型的不同(即等价关系)如何?他们似乎都继承equals()了AbstractSet?它与集合所持有的对象类型(例如Set<Cow>vs. Set<Chicken>)无关,是吗?