我想解决以下问题:
从集合A开始,我想将该集合(比如集合B)上的某种"视图"传递给某个方法.视图B不必包含原始集合A的所有元素.如果在此方法中将对象添加到视图(集合B)或从视图中删除,则这些更改也应反映在原始集合A上.
例如(伪代码):
开始情况:
Collection A = {1, 2, 3};
View-on-collection B = {1, 2};
Run Code Online (Sandbox Code Playgroud)方法调用:
someMethod(B) {
B.add(4);
B.remove(2);
}
Run Code Online (Sandbox Code Playgroud)结束情况:
Collection A = {1, 3, 4};
Run Code Online (Sandbox Code Playgroud)有谁知道这个问题的巧妙解决方案?
我使用的是Oracle 10g,我有一个重叠间隔的表.以简化形式:
create TABLE INTERVAL_TEST (
STARTDATE DATE NOT NULL,
ENDDATE DATE,
ITEM VARCHAR2(100) NOT NULL
)
insert into INTERVAL_TEST (STARTDATE, ENDDATE, ITEM) values (to_date('2012-01-01', 'YYYY-MM-DD'), null, 'AAA');
insert into INTERVAL_TEST (STARTDATE, ENDDATE, ITEM) values (to_date('2012-02-01', 'YYYY-MM-DD'), to_date('2012-03-01', 'YYYY-MM-DD'), 'BBB');
Run Code Online (Sandbox Code Playgroud)
如您所见,有重叠的条目.第一个中的null意味着它"永远"有效.我需要生成一个报告,在时间轴上显示历史记录,列出每行的有效项目数.输出中应该没有时间重叠,而是应该为没有变化的每个子区间列出所有有效项:
START END VALID_ITEMS
---------- ---------- --------------
2012-01-01 2012-02-01 AAA
2012-02-01 2012-03-01 AAA, BBB
2012-03-01 NULL AAA
Run Code Online (Sandbox Code Playgroud)
是否有生成此类结果的SQL语句?
我有一个Collections.synchronizedMap()由线程A读取和更新的同步Map(via ).线程B仅通过Map.keySet()(只读)访问Map .
我应该如何同步?该文件说,键集()(对于Collections.synchronizedMap)"不需要在synchronized块".我可以在同步块中放置线程A的读/写访问权限,但这是否必要?
我想即使使用同步Map或同步块,如果Map.keySet不需要同步(根据上面的文档链接),我似乎很奇怪...
更新:我错过了必须同步keySet的迭代,即使检索keySet不需要同步.拥有keySet而不能查看它并不是特别令人兴奋,因此最终结果=需要同步.改为使用ConcurrentHashMap.
我使用的是Oracle 10g,我有一个加入两个大表(数百万条记录)的视图.我试图为用户选择有限的"样本"数据,如下所示:
select * from VIEW_NAME where ROWNUM < 5;
Run Code Online (Sandbox Code Playgroud)
它非常慢,我认为它不应该是,因为我只需要几行结果,所以Oracle不应该计算完整的连接.
要求是用户应该能够以交互方式指定返回的行数(与结果中的哪些行无关紧要).有没有办法实现这个目标?(使用rownum或其他方法)
(我可以更改视图定义或最终SQL的构建方式,但据我所知,我不能动态地传递有关行的所需数量的视图的信息)
编辑:视图定义非常简单,如下所示:
CREATE OR REPLACE VIEW VIEW_NAME AS
(
select
e.id as ID,
e.somefield as something,
... (some similar selects from e)
c.field as anotherthing,
... (lots of other fields from c)
from SCHEMA.TABLE1 e
inner join SCHEMA.TABLE2 c on e.key = c.key
)
Run Code Online (Sandbox Code Playgroud)
解释计划提到两个表的完整表访问并不奇怪,因为只返回前几行不应该花费很长时间.
EDIT2:这是完整的计划
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 2644394598
----------------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes …Run Code Online (Sandbox Code Playgroud) 我喜欢的意思intermediate operations是Java8,当a terminal operation到达时,所有操作都会应用一次.
我在问是否有我可以使用的库Java 7允许我实现这样的行为.
注意:
我commons-collections4用于收集操作,比如forAllDo,所以有可能在这种情况下使用它吗?(中间与终端运营)
我有以下代码,
import java.util.Arrays;
public class ParellelStream {
public static void main(String args[]){
Double dbl[] = new Double[1000000];
for(int i=0; i<dbl.length;i++){
dbl[i]=Math.random();
}
long start = System.currentTimeMillis();
Arrays.parallelSort(dbl);
System.out.println("time taken :"+((System.currentTimeMillis())-start));
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时需要大约700到800毫秒的时间,但是当我将行Arrays.parallelSort替换为Arrays.sort时,它需要500到600毫秒.我读到了Arrays.parallelSort和Arrays.sort方法,该方法说Arrays.parellelSort在数据集较小时性能较差但在这里我使用的是1000000个元素的数组.什么可能是parallelSort性能不佳的原因?? 我正在使用java8.
我正在制作一个具有绘图板的应用程序,您可以在其中使用鼠标进行绘制,它会绘制在 BUfferedImage 中的标签之上。我现在正在尝试实现的是橡皮擦,问题是我找不到任何帮助将橡皮擦制作为 clearRect() 到 alpha 背景。(我无法定义颜色背景,因为用户可以将背景更改为他想要的任何图像)。总结:
以下是我的 DrawBoard 类,其中包含要绘制的所有内容。
public class DrawBoard extends JPanel implements MouseListener, MouseMotionListener{
public JLabel status;
private JLabel imgLabel; // this is where the drawing happens
public Point pstart, pfinish;
private List<Point> points = new ArrayList<Point>();
private List<BufferedImage> lines = new ArrayList<BufferedImage>();
private static final int BI_WIDTH = 1024;
private static final int BI_HEIGHT = 800;
private static int STROKESIZE = 7;
private BufferedImage bImage = new BufferedImage(BI_WIDTH, …Run Code Online (Sandbox Code Playgroud) 下面的代码是有效的,但它看起来很奇怪,有没有更好的方法.
var res:scala.collection.mutable.LinkedHashMap[String,scala.collection.immutable.Map[String,String]]=??
var arList = new ArrayList[String]()
res.keySet.map(arList.add(_))
//here res key set changed so i want to reassign the list by new keySet
res=?? //updated
arList.clear
res.keySet.map(arList.add(_))
Run Code Online (Sandbox Code Playgroud)
它看起来很奇怪,打电话给.clear上arList
所以我有一个包含Set中的一堆记录的程序.该集可能有几个项目或可能有数十万个.每条记录的一位数据是时间戳.我需要消除一组中的所有项目,但是相互之间的时间间隔为15秒.最有效的方法是什么?
目前我创建了该集的副本.然后我遍历集合,将第一个项目与其他项目进行比较,然后重复.如果发现匹配在15秒内,我将从重复集中删除它.然后将副本集写出到文件中.
显然这有效,但我终于意识到这是非常低效的.对于大型套装,这似乎需要花费很长时间,假设它不是出现其他问题.有人能为我提供更智能,更快捷,更有效(或恰当)的方式来实现这一点吗?我意识到,因为记录包含时间戳,排序它们可能会有很大帮助.我想保留这一切都包含在程序中,所以我想我需要研究排序和比较器.
我无法完全解决这个问题.我想出了一些改进我的代码的其他想法,但我不禁感到我仍然完全错了.谢谢你的任何建议.
哦,这是为了工作,而不是学校或任何其他任何帮助表示赞赏.
我尝试匹配给定字符串中的模式,这将是静态的,以下是我的程序:
package com.test.poc;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTestPatternMatcher {
public static final String EXAMPLE_TEST = "http://localhost:8080/api/upload/form/{uploadType}/{uploadName}";
public static void main(String[] args) {
Pattern pattern = Pattern.compile("{\\w+}");
// In case you would like to ignore case sensitivity you could use this
// statement
// Pattern pattern = Pattern.compile("\\s+", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(EXAMPLE_TEST);
// Check all occurance
while (matcher.find()) {
System.out.print("Start index: " + matcher.start());
System.out.print(" End index: " + matcher.end() + " ");
System.out.println(matcher.group());
}
// Now create …Run Code Online (Sandbox Code Playgroud) java ×6
collections ×4
java-8 ×2
oracle ×2
performance ×2
database ×1
erase ×1
graphics2d ×1
guava ×1
intervals ×1
java-2d ×1
java-7 ×1
map ×1
regex ×1
rownum ×1
scala ×1
scalastyle ×1
split ×1
sql ×1
synchronized ×1
view ×1